#!/bin/sh CI_NET_READY="/run/cloud-init/network-config-ready" LOG="/run/cloud-init/${0##*/}.log" LOG_INIT=0 DEBUG=0 find_name() { local match="" name="" none="_UNSET" pound="#" while read match name; do [ "${match#${pound}}" = "$match" ] || continue case "$match" in ID_NET_NAME=${ID_NET_NAME:-$none}) _RET="$name"; return 0;; ID_NET_NAME_PATH=${ID_NET_NAME_PATH:-$none}) _RET="$name"; return 0;; MAC_ADDRESS=${MAC_ADDRESS:-$none}) _RET="$name"; return 0;; INTERFACE=${INTERFACE:-$none}) _RET="$name"; return 0;; esac done return 0 } block_until_ready() { local fname="$1" local naplen="$2" max="$3" n=0 while ! [ -f "$fname" ]; do n=$(($n+1)) [ "$n" -ge "$max" ] && return 1 sleep $naplen done } log() { [ -n "${LOG}" ] || return [ "${DEBUG:-0}" = "0" ] && return if [ $LOG_INIT = 0 ]; then if [ -d "${LOG%/*}" ] || mkdir -p "${LOG%/*}"; then LOG_INIT=1 else echo "${0##*/}: WARN: log init to ${LOG%/*}" 1>&2 return fi elif [ "$LOG_INIT" = "-1" ]; then return fi local info="$$ $INTERFACE" if [ "$DEBUG" -gt 1 ]; then local up idle read up idle < /proc/uptime info="$$ $INTERFACE $up" fi echo "[$info]" "$@" >> "$LOG" } main() { local name="" readyfile="$CI_NET_READY" local info="INTERFACE=${INTERFACE} ID_NET_NAME=${ID_NET_NAME}" info="$info ID_NET_NAME_PATH=${ID_NET_NAME_PATH}" info="$info MAC_ADDRESS=${MAC_ADDRESS}" log "$info" ## Check to see if cloud-init.target is set. If cloud-init is ## disabled we do not want to do anything. if [ ! -f "/run/cloud-init/enabled" ]; then log "cloud-init disabled" return 0 fi block_until_ready "$readyfile" .1 600 || { log "failed waiting for ready on $INTERFACE"; return 1; } #find_name < "$CI_NET_RULES" && name="$_RET" || # { log "failed to find match for $INTERFACE"; return 0; } log "net config ready" #[ -z "$name" ] || echo "CLOUDINIT_NET_NAME=$name" } main "$@" exit # vi: ts=4 expandtab