From: Peter Palfrader Date: Mon, 28 May 2018 18:09:54 +0000 (+0200) Subject: Try an network_online target for stretch hosts X-Git-Url: https://git.adam-barratt.org.uk/?p=mirror%2Fdsa-puppet.git;a=commitdiff_plain;h=3b3433e2054bf8885d7ea0bd97c57a7ce0004563 Try an network_online target for stretch hosts --- diff --git a/modules/roles/manifests/snapshot_web.pp b/modules/roles/manifests/snapshot_web.pp index 6054b5227..a20fb381f 100644 --- a/modules/roles/manifests/snapshot_web.pp +++ b/modules/roles/manifests/snapshot_web.pp @@ -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 index 000000000..24742504f --- /dev/null +++ b/modules/stretch/files/ifupdown-wait-online.service @@ -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 index 000000000..21f3ac60e --- /dev/null +++ b/modules/stretch/files/wait-online.sh @@ -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 index 000000000..432973b38 --- /dev/null +++ b/modules/stretch/manifests/network_online.pp @@ -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'], + } + } +} +