diff options
author | Scott Moser <smoser@ubuntu.com> | 2016-03-28 14:47:19 -0400 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2016-03-28 14:47:19 -0400 |
commit | bf88c6ef54608f4488fca806b5f30afad08d6c51 (patch) | |
tree | 0506919687da16c313247d38679b1c1370d9f269 | |
parent | 18bf614ca1d9fbabdf83495e7675a2cacaf6c2f4 (diff) | |
download | vyos-cloud-init-bf88c6ef54608f4488fca806b5f30afad08d6c51.tar.gz vyos-cloud-init-bf88c6ef54608f4488fca806b5f30afad08d6c51.zip |
improve how cloud-init-wait waits
since we run from a udev event, this is sufficient.
udev settle will exit when either of
a.) the file exists
b.) the udev event queue has all been processed.
Since cloud-init-wait is being run as a udev event, 'b' cannot
be satisfied until it finishes. Thus, this essentially becomes a
inotify based wait for the file /run/cloud-init/network-config-ready
and no loops are needed.
-rwxr-xr-x | udev/cloud-init-wait | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/udev/cloud-init-wait b/udev/cloud-init-wait index 7d53dee4..9df502e3 100755 --- a/udev/cloud-init-wait +++ b/udev/cloud-init-wait @@ -3,16 +3,13 @@ CI_NET_READY="/run/cloud-init/network-config-ready" LOG="/run/cloud-init/${0##*/}.log" LOG_INIT=0 +MAX_WAIT=60 DEBUG=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 + local fname="$1" max="$2" + [ -f "$fname" ] && return 0 + udevadm settle "--timeout=$max" "--exit-if-exists=$fname" } log() { @@ -56,7 +53,7 @@ main() { return 0 fi - block_until_ready "$readyfile" .1 600 || + block_until_ready "$readyfile" "$MAX_WAIT" || { log "failed waiting for ready on $INTERFACE"; return 1; } log "net config ready" |