X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=env%2Flib%2Fcommon.sh;h=af54d237462701ba9e1b890412093350c493b114;hb=00ee6025d0bcd56f5a55f06c76c97cc864534b20;hp=0d589a5329945504e1f744a73a3d187db7f3ca66;hpb=933a4fc772ef3b0e96ad3517027441d3997555c3;p=icn.git diff --git a/env/lib/common.sh b/env/lib/common.sh index 0d589a5..af54d23 100755 --- a/env/lib/common.sh +++ b/env/lib/common.sh @@ -1,44 +1,292 @@ -#!/bin/bash +#!/usr/bin/env bash +set -eu -o pipefail -#supported OS version -UBUNTU_BIONIC=${UBUNTU_BIONIC:-Ubuntu 18.04.2 LTS} +IRONIC_DATA_DIR=${IRONIC_DATA_DIR:-"/opt/ironic"} +NODES_FILE=${NODES_FILE:-"${IRONIC_DATA_DIR}/nodes.json"} +#IRONIC_PROVISIONING_INTERFACE is required to be provisioning, don't change it +IRONIC_INTERFACE=${IRONIC_INTERFACE:-} +IRONIC_PROVISIONING_INTERFACE=${IRONIC_PROVISIONING_INTERFACE:-"provisioning"} +IRONIC_PROVISIONING_INTERFACE_IP=${IRONIC_PROVISIONING_INTERFACE_IP:-"172.22.0.1"} +BM_IMAGE_URL=${BM_IMAGE_URL:-"https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img"} +BM_IMAGE=${BM_IMAGE:-"focal-server-cloudimg-amd64.img"} -#offline mode variable -DOWNLOAD_PATH=${DOWNLOAD_PATH:-/opt/icn/} -LOCAL_APT_REPO=${LOCAL_APT_REPO:-$DOWNLOAD_PATH/apt} -PIP_CACHE_DIR=${PIP_CACHE_DIR:-$DOWNLOAD_PATH/pip-cache-dir} -BUILD_DIR=${BUILD_DIR:-$DOWNLOAD_PATH/build-dir} -CONTAINER_IMAGES_DIR=${CONTAINER_IMAGES_DIR:-$OFFLINE_DOWNLOAD_PATH/docker-dir} +#Baremetal operator repository URL +BMOREPO="${BMOREPO:-https://github.com/metal3-io/baremetal-operator.git}" +#Path to clone the baremetal operator repo +BMOPATH="/opt/src/github.com/metal3-io/baremetal-operator" +#Bare Metal Operator version to use +# If changing this, the value in deploy/ironic/icn/kustomization.yaml +# must also be changed +BMO_VERSION="capm3-v0.5.1" -#set variables -#Todo include over all variables here -KUBE_VERSION=${KUBE_VERSION:-"v1.15.0"} -POD_NETWORK_CIDR=${POD_NETWORK_CIDR:-"10.244.0.0/16"} -PODMAN_CNI_CONFLIST=${PODMAN_CNI_CONFLIST:-"https://raw.githubusercontent.com/containers/libpod/v1.4.4/cni/87-podman-bridge.conflist"} +#KuD repository URL +KUDREPO="${KUDREPO:-https://github.com/onap/multicloud-k8s.git}" +#Path to clone the KuD repo +KUDPATH="/opt/src/github.com/onap/multicloud-k8s" +#KuD version to use +KUD_VERSION="8157bf63753839ce4e9006978816fad3f63ca2de" -#Bootstrap K8s cluster +#EMCO repository URL +EMCOREPO="${EMCOREPO:-https://gitlab.com/project-emco/core/emco-base.git}" +#Path to clone the EMCO repo +EMCOPATH="/opt/src/emco-base" +#EMCO version to use +EMCO_VERSION="v21.12" +#Discard existing repo directory +FORCE_REPO_UPDATE="${FORCE_REPO_UPDATE:-false}" -#Ironic variables -IRONIC_IMAGE=${IRONIC_IMAGE:-"quay.io/metal3-io/ironic:master"} -IRONIC_INSPECTOR_IMAGE=${IRONIC_INSPECTOR_IMAGE:-"quay.io/metal3-io/ironic-inspector"} -IRONIC_BAREMETAL_IMAGE=${IRONIC_BAREMETAL_IMAGE:-"quay.io/metal3-io/baremetal-operator:master"} -IRONIC_BAREMETAL_SOCAT_IMAGE=${IRONIC_BAREMETAL_SOCAT_IMAGE:-"alpine/socat:latest"} +# The kustomize version to use +KUSTOMIZE_VERSION="v4.3.0" -IRONIC_DATA_DIR=${IRONIC_DATA_DIR:-"/opt/ironic"} -#IRONIC_PROVISIONING_INTERFACE is required to be provisioning, don't change it -IRONIC_PROVISIONING_INTERFACE=${IRONIC_PROVISIONING_INTERFACE:-"provisioning"} -IRONIC_IPMI_INTERFACE=${IRONIC_IPMI_INTERFACE:-"eno1"} -IRONIC_PROVISIONING_INTERFACE_IP=${IRONIC_PROVISIONING_INTERFACE_IP:-"172.22.0.1"} -IRONIC_IPMI_INTERFACE_IP=${IRONIC_IPMI_INTERFACE_IP:-"172.31.1.9"} -BM_IMAGE_URL=${BM_IMAGE_URL:-"https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img"} -BM_IMAGE=${BM_IMAGE:-"bionic-server-cloudimg-amd64.img"} - -#Todo change into nodes list in json pattern -COMPUTE_NODE_NAME=${COMPUTE_NODE_NAME:-"el-100-node-01"} -COMPUTE_IPMI_ADDRESS=${COMPUTE_IPMI_ADDRESS:-"172.31.1.17"} -COMPUTE_IPMI_USER=${COMPUTE_IPMI_USER:-"ryeleswa"} -COMPUTE_IPMI_PASSWORD=${COMPUTE_IPMI_PASSWORD:-"changeme1"} -COMPUTE_NODE_FQDN=${COMPUTE_NODE_FQDN:-"node01.akraino.org"} -#COMPUTE_NODE_HOSTNAME=${COMPUTE_NODE_HOSTNAME:-"node01"} -COMPUTE_NODE_PASSWORD=${COMPUTE_NODE_PASSWORD:-"mypasswd"} +#Cluster API version to use +CAPI_VERSION="v0.4.3" + +#Cluster API version to use +CAPM3_VERSION="v0.5.1" + +#The flux version to use +FLUX_VERSION="0.25.3" + +#The sops version to use +SOPS_VERSION="v3.7.1" + +#refered from onap +function call_api { + #Runs curl with passed flags and provides + #additional error handling and debug information + + #Function outputs server response body + #and performs validation of http_code + + local status + local curl_response_file="$(mktemp -p /tmp)" + local curl_common_flags=(-s -w "%{http_code}" -o "${curl_response_file}") + local command=(curl "${curl_common_flags[@]}" "$@") + + echo "[INFO] Running '${command[@]}'" >&2 + if ! status="$("${command[@]}")"; then + echo "[ERROR] Internal curl error! '$status'" >&2 + cat "${curl_response_file}" + rm "${curl_response_file}" + return 2 + else + echo "[INFO] Server replied with status: ${status}" >&2 + cat "${curl_response_file}" + rm "${curl_response_file}" + if [[ "${status:0:1}" =~ [45] ]]; then + return 1 + else + return 0 + fi + fi +} + +function list_nodes { + if [ ! -f "$NODES_FILE" ]; then + exit 1 + fi + + # The boot MAC address must be specified when a port is included + # in the IPMI driver address (i.e when using the VirtualBMC + # controller). Note that the below is a bit of a hack as it only + # checks the first entry in NODES_FILE for the port. + if cat "$NODES_FILE" | + jq -r '.nodes[0].ipmi_driver_info.address' | grep -c ':[0-9]\+$' >/dev/null; then + BOOT_LINK=$(cat "$NODES_FILE" | + jq -r '.nodes[0].net.links | map(.id=="provisioning_nic") | index(true)') + cat "$NODES_FILE" | + jq -r --argjson BOOT_LINK $BOOT_LINK '.nodes[] | [ + .name, + .ipmi_driver_info.username, + .ipmi_driver_info.password, + .ipmi_driver_info.address, + .net.links[$BOOT_LINK].ethernet_mac_address, + .os.username, + .os.password, + .os.image_name + ] | @csv' | + sed 's/"//g' + else + cat "$NODES_FILE" | + jq -r '.nodes[] | [ + .name, + .ipmi_driver_info.username, + .ipmi_driver_info.password, + .ipmi_driver_info.address, + "", + .os.username, + .os.password, + .os.image_name + ] | @csv' | + sed 's/"//g' + fi +} + +function node_userdata { + name="$1" + username="$2" + password="$3" + COMPUTE_NODE_FQDN="$name.akraino.icn.org" + + # validate that the user isn't expecting the deprecated + # COMPUTE_NODE_PASSWORD to be used + if [ "$password" != "${COMPUTE_NODE_PASSWORD:-$password}" ]; then + cat < ${BM_IMAGE}.md5sum + fi + popd + fi +}