summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2016-03-28 14:47:19 -0400
committerScott Moser <smoser@ubuntu.com>2016-03-28 14:47:19 -0400
commitbf88c6ef54608f4488fca806b5f30afad08d6c51 (patch)
tree0506919687da16c313247d38679b1c1370d9f269
parent18bf614ca1d9fbabdf83495e7675a2cacaf6c2f4 (diff)
downloadvyos-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-xudev/cloud-init-wait13
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"