#!/bin/bash set -ux function get_metadata_ip() { local METADATA_IP # Look for a variety of Heat transports # FIXME: Heat should provide a way to obtain this in a single place for URL in os-collect-config.cfn.metadata_url os-collect-config.heat.auth_url os-collect-config.request.metadata_url os-collect-config.zaqar.auth_url; do METADATA_IP=$(os-apply-config --key $URL --key-default '' --type raw 2>/dev/null | sed -e 's|http.*://\([^:]*\).*|\1|') [ -n "$METADATA_IP" ] && break done echo $METADATA_IP } function is_local_ip() { local IP_TO_CHECK=$1 if ip -o a | grep "inet6\? $IP_TO_CHECK/" &>/dev/null; then return 0 else return 1 fi } function ping_metadata_ip() { local METADATA_IP=$(get_metadata_ip) if [ -n "$METADATA_IP" ] && ! is_local_ip $METADATA_IP; then echo -n "Trying to ping metadata IP ${METADATA_IP}..." local COUNT=0 until ping -c 1 $METADATA_IP &> /dev/null; do COUNT=$(( $COUNT + 1 )) if [ $COUNT -eq 10 ]; then echo "FAILURE" echo "$METADATA_IP is not pingable." >&2 exit 1 fi done echo "SUCCESS" else echo "No metadata IP found. Skipping." fi } function configure_safe_defaults() { [[ $? == 0 ]] && return 0 cat > /etc/os-net-config/dhcp_all_interfaces.yaml </dev/null HAS_LINK="$(cat /sys/class/net/${iface}/carrier)" TRIES=10 while [ "$HAS_LINK" == "0" -a $TRIES -gt 0 ]; do HAS_LINK="$(cat /sys/class/net/${iface}/carrier)" if [ "$HAS_LINK" == "1" ]; then break else sleep 1 fi TRIES=$(( TRIES - 1 )) done if [ "$HAS_LINK" == "1" ] ; then cat >> /etc/os-net-config/dhcp_all_interfaces.yaml <&2 exit 1 fi fi