$(notify "USAGE:" 2)
$(basename "$0") -b base-uri -l lab-name -p pod-name -s deploy-scenario \\
- [-B PXE Bridge [-B Mgmt Bridge [-B Internal Bridge [-B Public Bridge]]]]
+ [-B PXE Bridge [-B Mgmt Bridge [-B Internal Bridge [-B Public Bridge]]]] \\
+ [-S storage-dir]
$(notify "OPTIONS:" 2)
-b Base-uri for the stack-configuration structure
-l Lab-name
-p Pod-name
-s Deploy-scenario short-name
+ -S Storage dir for VM images
$(notify "DISABLED OPTIONS (not yet supported with MCP):" 3)
-d (disabled) Dry-run
-F (disabled) Do only create a Salt master
-i (disabled) iso url
-L (disabled) Deployment log path and file name
- -S (disabled) Storage dir for VM images
-T (disabled) Timeout, in minutes, for the deploy.
$(notify "Description:" 2)
-p POD name as defined in the configuration directory, e.g. pod-1
-s Deployment-scenario, this points to a short deployment scenario name, which
has to be defined in config directory (e.g. os-odl_l2-nofeature-noha).
+-S Storage dir for VM images, default is mcp/deploy/images
$(notify "Disabled input parameters (not yet supported with MCP):" 3)
-d (disabled) Dry-run - Produce deploy config files, but do not execute deploy
-e (disabled) Do not launch environment deployment
-F (disabled) Do only create a Salt master
-L (disabled) Deployment log path and name, eg. -L /home/jenkins/job.log.tar.gz
--S (disabled) Storage dir for VM images, default is fuel/deploy/images
-T (disabled) Timeout, in minutes, for the deploy.
It defaults to using the DEPLOY_TIMEOUT environment variable when defined.
-i (disabled) .iso image to be deployed (needs to be provided in a URI
#
SCRIPT_PATH=$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")
DEPLOY_DIR=$(cd "${SCRIPT_PATH}/../mcp/scripts"; pwd)
+STORAGE_DIR=$(cd "${SCRIPT_PATH}/../mcp/deploy/images"; pwd)
DEPLOY_TYPE='baremetal'
OPNFV_BRIDGES=('pxebr' 'mgmt' 'internal' 'public')
URI_REGEXP='(file|https?|ftp)://.*'
-export SSH_KEY=${SSH_KEY:-mcp.rsa}
+# NOTE: When this script runs with sudo, key will land in /root/opnfv/mcp.rsa,
+# unless SSH_KEY is set to point to non-root user's home (e.g. via env var).
+export SSH_KEY=${SSH_KEY:-"${HOME}/opnfv/mcp.rsa"}
export SALT_MASTER=${SALT_MASTER_IP:-192.168.10.100}
export MAAS_IP=${MAAS_IP:-192.168.10.3}
export SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ${SSH_KEY}"
USE_EXISTING_FUEL=''
FUEL_CREATION_ONLY=''
NO_DEPLOY_ENVIRONMENT=''
-STORAGE_DIR=''
DRY_RUN=0
if ! [ -z "${DEPLOY_TIMEOUT}" ]; then
DEPLOY_TIMEOUT="-dt ${DEPLOY_TIMEOUT}"
DEPLOY_SCENARIO=${OPTARG}
;;
S)
- notify '' 3 "${OPTION}"; continue
if [[ ${OPTARG} ]]; then
STORAGE_DIR="-s ${OPTARG}"
fi
fi
# Check scenario file existence
-if [ ! -f ../config/scenario/${DEPLOY_TYPE}/${DEPLOY_SCENARIO}.yaml ]; then
+if [ ! -f "../config/scenario/${DEPLOY_TYPE}/${DEPLOY_SCENARIO}.yaml" ]; then
notify "[WARN] ${DEPLOY_SCENARIO}.yaml not found! \
Setting simplest scenario (os-nosdn-nofeature-noha)\n" 3
DEPLOY_SCENARIO='os-nosdn-nofeature-noha'
- if [ ! -f ../config/scenario/${DEPLOY_TYPE}/${DEPLOY_SCENARIO}.yaml ]; then
+ if [ ! -f "../config/scenario/${DEPLOY_TYPE}/${DEPLOY_SCENARIO}.yaml" ]; then
notify "[ERROR] Scenario definition file is missing!\n" 1>&2
exit 1
fi
# Infra setup
generate_ssh_key
-prepare_vms virtual_nodes "${base_image}"
+prepare_vms virtual_nodes "${base_image}" "${STORAGE_DIR}"
create_networks OPNFV_BRIDGES
-create_vms virtual_nodes virtual_nodes_ram virtual_nodes_vcpus OPNFV_BRIDGES
+create_vms virtual_nodes virtual_nodes_ram virtual_nodes_vcpus \
+ OPNFV_BRIDGES "${STORAGE_DIR}"
update_mcpcontrol_network
start_vms virtual_nodes
check_connection
#
generate_ssh_key() {
+ # shellcheck disable=SC2155
+ local mcp_ssh_key=$(basename "${SSH_KEY}")
local user=${USER}
if [ -n "${SUDO_USER}" ] && [ "${SUDO_USER}" != 'root' ]; then
user=${SUDO_USER}
fi
- if [ -f "/tmp/${SSH_KEY}" ]; then
- cp "/tmp/${SSH_KEY}" .
- ssh-keygen -f "${SSH_KEY}" -y > "${SSH_KEY}.pub"
+ if [ -f "${SSH_KEY}" ]; then
+ cp "${SSH_KEY}" .
+ ssh-keygen -f "${mcp_ssh_key}" -y > "${mcp_ssh_key}.pub"
fi
- [ -f "${SSH_KEY}" ] || ssh-keygen -f "${SSH_KEY}" -N ''
- install -o "${user}" -m 0600 "${SSH_KEY}" /tmp/
+ [ -f "${mcp_ssh_key}" ] || ssh-keygen -f "${mcp_ssh_key}" -N ''
+ install -D -o "${user}" -m 0600 "${mcp_ssh_key}" "${SSH_KEY}"
}
get_base_image() {
local base_image=$1
+ local image_dir=$2
- mkdir -p images
- wget -P /tmp -N "${base_image}"
+ mkdir -p "${image_dir}"
+ wget -P "${image_dir}" -N "${base_image}"
}
cleanup_vms() {
prepare_vms() {
local -n vnodes=$1
local base_image=$2
+ local image_dir=$3
cleanup_vms
- get_base_image "${base_image}"
+ get_base_image "${base_image}" "${image_dir}"
envsubst '${SALT_MASTER},${CLUSTER_DOMAIN}' < \
user-data.template > user-data.sh
for node in "${vnodes[@]}"; do
# create/prepare images
- ./create-config-drive.sh -k "${SSH_KEY}.pub" -u user-data.sh \
- -h "${node}" "images/mcp_${node}.iso"
- cp "/tmp/${base_image/*\/}" "images/mcp_${node}.qcow2"
- qemu-img resize "images/mcp_${node}.qcow2" 100G
+ ./create-config-drive.sh -k "$(basename "${SSH_KEY}").pub" -u user-data.sh \
+ -h "${node}" "${image_dir}/mcp_${node}.iso"
+ cp "${image_dir}/${base_image/*\/}" "${image_dir}/mcp_${node}.qcow2"
+ qemu-img resize "${image_dir}/mcp_${node}.qcow2" 100G
done
}
local -n vnodes_ram=$2
local -n vnodes_vcpus=$3
local -n vnode_networks=$4
+ local image_dir=$5
# AArch64: prepare arch specific arguments
local virt_extra_args=""
virt-install --name "${node}" \
--ram "${vnodes_ram[$node]}" --vcpus "${vnodes_vcpus[$node]}" \
--cpu host-passthrough --accelerate ${net_args} \
- --disk path="$(pwd)/images/mcp_${node}.qcow2",format=qcow2,bus=virtio,cache=none,io=native \
+ --disk path="${image_dir}/mcp_${node}.qcow2",format=qcow2,bus=virtio,cache=none,io=native \
--os-type linux --os-variant none \
--boot hd --vnc --console pty --autostart --noreboot \
- --disk path="$(pwd)/images/mcp_${node}.iso",device=cdrom \
+ --disk path="${image_dir}/mcp_${node}.iso",device=cdrom \
--noautoconsole \
${virt_extra_args}
done
update_mcpcontrol_network() {
# set static ip address for salt master node, MaaS node
+ # shellcheck disable=SC2155
local cmac=$(virsh domiflist cfg01 2>&1| awk '/mcpcontrol/ {print $5; exit}')
+ # shellcheck disable=SC2155
local amac=$(virsh domiflist mas01 2>&1| awk '/mcpcontrol/ {print $5; exit}')
virsh net-update "mcpcontrol" add ip-dhcp-host \
"<host mac='${cmac}' name='cfg01' ip='${SALT_MASTER}'/>" --live