Try an network_online target for stretch hosts
[mirror/dsa-puppet.git] / modules / stretch / files / wait-online.sh
1 #!/bin/sh
2 # from busters's ifupdown 0.8.32 package (as of May 2018)
3 set -e
4
5 WAIT_ONLINE_METHOD="ifup"
6 WAIT_ONLINE_IFACE=""
7 WAIT_ONLINE_ADDRESS=""
8 WAIT_ONLINE_TIMEOUT=300
9
10 [ -f /etc/default/networking ] && . /etc/default/networking
11
12 case "$WAIT_ONLINE_METHOD" in
13 route)
14         [ -n "$WAIT_ONLINE_ADDRESS" ] || WAIT_ONLINE_ADDRESS=default
15         (/usr/bin/timeout "$WAIT_ONLINE_TIMEOUT" /bin/ip mon r & /bin/ip -4 r s; /bin/ip -6 r s) | /bin/grep -q "^$WAIT_ONLINE_ADDRESS\>"
16         ;;
17
18 ping)
19         if [ -z "$WAIT_ONLINE_ADDRESS" ]; then
20                 echo "No WAIT_ONLINE_ADDRESS specified" >&2
21                 exit 1
22         fi
23         /bin/ping -q -c 1 -w "WAIT_ONLINE_TIMEOUT" "$WAIT_ONLINE_ADDRESS" >/dev/null
24         ;;
25
26 ping6)
27         /bin/ping6 -q -c 1 -w "WAIT_ONLINE_TIMEOUT" "$WAIT_ONLINE_ADDRESS" >/dev/null
28         ;;
29
30 ifup|iface|interface)
31         up=false
32         if [ -z "$WAIT_ONLINE_IFACE" ]; then
33                 auto_list="$(/sbin/ifquery -X lo --list)"
34                 hotplug_list="$(/sbin/ifquery -X lo --allow=hotplug --list)"
35                 if [ -n "$auto_list" ]; then
36                         for i in $(seq 1 $WAIT_ONLINE_TIMEOUT); do
37                                 up=true
38                                 for iface in $auto_list; do
39                                         if ! /sbin/ifquery --state $iface >/dev/null; then
40                                                 up=false
41                                                 break
42                                         fi
43                                 done
44                                 if [ $up = true ]; then
45                                         break
46                                 fi
47                                 sleep 1
48                         done
49                 elif [ -n "$(/sbin/ifquery --allow=hotplug --list)" ]; then
50                         for i in $(seq 1 $WAIT_ONLINE_TIMEOUT); do
51                                 if [ -n "$(/sbin/ifquery -X lo --allow=hotplug --state)" ]; then
52                                         up=true
53                                         break
54                                 fi
55                                 sleep 1
56                         done
57                 else
58                         exit 0
59                 fi
60         else
61                 for i in $(seq 1 $WAIT_ONLINE_TIMEOUT); do
62                         if [ -n "$(/sbin/ifquery --state $WAIT_ONLINE_IFACE)" ]; then
63                                 up=true
64                                 break
65                         fi
66                         sleep 1
67                 done
68         fi
69         [ $up = true ] || exit 1
70         ;;
71
72 no|none)
73         exit 0
74         ;;
75
76 *)
77         echo "Unknown wait method $WAIT_ONLINE_METHOD" >&2
78         exit 1
79         ;;
80 esac