Try an network_online target for stretch hosts
authorPeter Palfrader <peter@palfrader.org>
Mon, 28 May 2018 18:09:54 +0000 (20:09 +0200)
committerPeter Palfrader <peter@palfrader.org>
Mon, 28 May 2018 18:09:54 +0000 (20:09 +0200)
modules/roles/manifests/snapshot_web.pp
modules/stretch/files/ifupdown-wait-online.service [new file with mode: 0644]
modules/stretch/files/wait-online.sh [new file with mode: 0755]
modules/stretch/manifests/network_online.pp [new file with mode: 0644]

index 6054b52..a20fb38 100644 (file)
@@ -1,6 +1,7 @@
 class roles::snapshot_web {
        include apache2
        include apache2::rewrite
+       include stretch::network_online
 
        ensure_packages ( [
                "libapache2-mod-wsgi",
diff --git a/modules/stretch/files/ifupdown-wait-online.service b/modules/stretch/files/ifupdown-wait-online.service
new file mode 100644 (file)
index 0000000..2474250
--- /dev/null
@@ -0,0 +1,14 @@
+# from busters's ifupdown 0.8.32 package (as of May 2018)
+[Unit]
+Description=Wait for network to be configured by ifupdown
+DefaultDependencies=no
+Before=network-online.target
+ConditionFileIsExecutable=/sbin/ifup
+
+[Service]
+Type=oneshot
+ExecStart=/lib/ifupdown/wait-online.sh
+RemainAfterExit=yes
+
+[Install]
+WantedBy=network-online.target
diff --git a/modules/stretch/files/wait-online.sh b/modules/stretch/files/wait-online.sh
new file mode 100755 (executable)
index 0000000..21f3ac6
--- /dev/null
@@ -0,0 +1,80 @@
+#!/bin/sh
+# from busters's ifupdown 0.8.32 package (as of May 2018)
+set -e
+
+WAIT_ONLINE_METHOD="ifup"
+WAIT_ONLINE_IFACE=""
+WAIT_ONLINE_ADDRESS=""
+WAIT_ONLINE_TIMEOUT=300
+
+[ -f /etc/default/networking ] && . /etc/default/networking
+
+case "$WAIT_ONLINE_METHOD" in
+route)
+       [ -n "$WAIT_ONLINE_ADDRESS" ] || WAIT_ONLINE_ADDRESS=default
+       (/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\>"
+       ;;
+
+ping)
+       if [ -z "$WAIT_ONLINE_ADDRESS" ]; then
+               echo "No WAIT_ONLINE_ADDRESS specified" >&2
+               exit 1
+       fi
+       /bin/ping -q -c 1 -w "WAIT_ONLINE_TIMEOUT" "$WAIT_ONLINE_ADDRESS" >/dev/null
+       ;;
+
+ping6)
+       /bin/ping6 -q -c 1 -w "WAIT_ONLINE_TIMEOUT" "$WAIT_ONLINE_ADDRESS" >/dev/null
+       ;;
+
+ifup|iface|interface)
+       up=false
+       if [ -z "$WAIT_ONLINE_IFACE" ]; then
+               auto_list="$(/sbin/ifquery -X lo --list)"
+               hotplug_list="$(/sbin/ifquery -X lo --allow=hotplug --list)"
+               if [ -n "$auto_list" ]; then
+                       for i in $(seq 1 $WAIT_ONLINE_TIMEOUT); do
+                               up=true
+                               for iface in $auto_list; do
+                                       if ! /sbin/ifquery --state $iface >/dev/null; then
+                                               up=false
+                                               break
+                                       fi
+                               done
+                               if [ $up = true ]; then
+                                       break
+                               fi
+                               sleep 1
+                       done
+               elif [ -n "$(/sbin/ifquery --allow=hotplug --list)" ]; then
+                       for i in $(seq 1 $WAIT_ONLINE_TIMEOUT); do
+                               if [ -n "$(/sbin/ifquery -X lo --allow=hotplug --state)" ]; then
+                                       up=true
+                                       break
+                               fi
+                               sleep 1
+                       done
+               else
+                       exit 0
+               fi
+       else
+               for i in $(seq 1 $WAIT_ONLINE_TIMEOUT); do
+                       if [ -n "$(/sbin/ifquery --state $WAIT_ONLINE_IFACE)" ]; then
+                               up=true
+                               break
+                       fi
+                       sleep 1
+               done
+       fi
+       [ $up = true ] || exit 1
+       ;;
+
+no|none)
+       exit 0
+       ;;
+
+*)
+       echo "Unknown wait method $WAIT_ONLINE_METHOD" >&2
+       exit 1
+       ;;
+esac
diff --git a/modules/stretch/manifests/network_online.pp b/modules/stretch/manifests/network_online.pp
new file mode 100644 (file)
index 0000000..432973b
--- /dev/null
@@ -0,0 +1,19 @@
+class stretch::network_online {
+       if versioncmp($::lsbmajdistrelease, '9') <= 0 {
+               
+               exec { 'systemctl enable ifupdown-wait-online.service':
+                       refreshonly => true,
+               }
+
+               file { '/lib/ifupdown/wait-online.sh':
+                       mode   => '0555',
+                       source => 'puppet:///modules/stretch/wait-online.sh',
+               }
+               file { '/lib/systemd/system/ifupdown-wait-online.service':
+                       mode   => '0555',
+                       source => 'puppet:///modules/stretch/ifupdown-wait-online.service',
+                       notify  => Exec['systemctl enable ifupdown-wait-online.service'],
+               }
+       }
+}
+