X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=env%2Flib%2Fcommon.sh;h=7ec65c53c9e9797365898d4387569f8ed12bca35;hb=55f3ba9a34ec650dc044ef6faff2b4c6fd7fffd4;hp=9c08025d1c10a229986e5b064d4d94942c490110;hpb=4af76f3aff2833922846f7cbf6fc3490dd72ea93;p=icn.git diff --git a/env/lib/common.sh b/env/lib/common.sh index 9c08025..7ec65c5 100755 --- a/env/lib/common.sh +++ b/env/lib/common.sh @@ -1,37 +1,13 @@ #!/usr/bin/env bash set -eu -o pipefail -#supported OS version -UBUNTU_BIONIC=${UBUNTU_BIONIC:-Ubuntu 18.04.2 LTS} - -#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:-$DOWNLOAD_PATH/docker-dir} - -#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"} - -#Bootstrap K8s cluster -BS_DHCP_INTERFACE=${BS_DHCP_INTERFACE:-} -BS_DHCP_INTERFACE_IP=${BS_DHCP_INTERFACE_IP:-} -BS_DHCP_DIR=${BS_DHCP_DIR:-$DOWNLOAD_PATH/dhcp} - -#User Provider Network configuration -PROVIDER_NETWORK_GATEWAY=${PROVIDER_NETWORK_GATEWAY:-} -PROVIDER_NETWORK_DNS=${PROVIDER_NETWORK_DNS:-} #Ironic variables IRONIC_IMAGE=${IRONIC_IMAGE:-"integratedcloudnative/ironic:v1.0-icn"} IRONIC_INSPECTOR_IMAGE=${IRONIC_INSPECTOR_IMAGE:-"integratedcloudnative/ironic-inspector:v1.0-icn"} -IRONIC_BAREMETAL_IMAGE=${IRONIC_BAREMETAL_IMAGE:-"integratedcloudnative/baremetal-operator:v1.0-icn"} +IRONIC_BAREMETAL_IMAGE=${IRONIC_BAREMETAL_IMAGE:-"integratedcloudnative/baremetal-operator:v2.0-icn"} IPA_DOWNLOADER_IMAGE=${IPA_DOWNLOADER_IMAGE:-"integratedcloudnative/ironic-ipa-downloader:v1.0-icn"} -IRONIC_BAREMETAL_SOCAT_IMAGE=${IRONIC_BAREMETAL_SOCAT_IMAGE:-"alpine/socat:latest"} IRONIC_DATA_DIR=${IRONIC_DATA_DIR:-"/opt/ironic"} #IRONIC_PROVISIONING_INTERFACE is required to be provisioning, don't change it @@ -39,14 +15,9 @@ IRONIC_INTERFACE=${IRONIC_INTERFACE:-} IRONIC_PROVISIONING_INTERFACE=${IRONIC_PROVISIONING_INTERFACE:-"provisioning"} IRONIC_IPMI_INTERFACE=${IRONIC_IPMI_INTERFACE:-} IRONIC_PROVISIONING_INTERFACE_IP=${IRONIC_PROVISIONING_INTERFACE_IP:-"172.22.0.1"} -IRONIC_IPMI_INTERFACE_IP=${IRONIC_IPMI_INTERFACE_IP:-} 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"} -#Path to clone the metal3 dev env repo -M3PATH="$(go env GOPATH)/src/github.com/metal3-io" -#Path to clone the baremetal operator repo -BMOPATH="${M3PATH}/baremetal-operator" #Baremetal operator repository URL BMOREPO="${BMOREPO:-https://github.com/metal3-io/baremetal-operator.git}" #Baremetal operator repository branch to checkout @@ -92,16 +63,64 @@ function list_nodes { exit 1 fi - 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' + # 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_networkdata { + name=$1 + + NODES_FILE="${IRONIC_DATA_DIR}/nodes.json" + + if [ ! -f "$NODES_FILE" ]; then + exit 1 + fi + + cat $NODES_FILE | jq -r --arg name "$name" '.nodes[] | select(.name==$name) | .net' +} + +function wait_for { + local -r interval=${WAIT_FOR_INTERVAL:-30s} + local -r max_tries=${WAIT_FOR_TRIES:-20} + local try=0 + until "$@"; do + echo "[${try}/${max_tries}] - Waiting ${interval} for $*" + sleep ${interval} + try=$((try+1)) + if [[ ${try} -ge ${max_tries} ]]; then + return 1 + fi + done +}