diff --git a/roles/dch-storage-net/files/wait-global-address.service b/roles/dch-storage-net/files/wait-global-address.service new file mode 100644 index 0000000..86cb769 --- /dev/null +++ b/roles/dch-storage-net/files/wait-global-address.service @@ -0,0 +1,14 @@ +[Unit] +Description=Wait for global address on %I +Requires=sys-subsystem-net-devices-%i.device +After=network-pre.target +Before=network-online.target + + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/local/libexec/wait-global-address.sh %I + +[Install] +WantedBy=network-online.target diff --git a/roles/dch-storage-net/files/wait-global-address.sh b/roles/dch-storage-net/files/wait-global-address.sh new file mode 100644 index 0000000..16eb331 --- /dev/null +++ b/roles/dch-storage-net/files/wait-global-address.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +until ip -o address show dev "$1" | grep -q global; do + printf 'Waiting for global address on %s\n' "$1" + sleep 1; +done diff --git a/roles/dch-storage-net/handlers/main.yml b/roles/dch-storage-net/handlers/main.yml new file mode 100644 index 0000000..8d4e1e3 --- /dev/null +++ b/roles/dch-storage-net/handlers/main.yml @@ -0,0 +1,2 @@ +- name: reload systemd + command: systemctl daemon-reload diff --git a/roles/dch-storage-net/tasks/main.yml b/roles/dch-storage-net/tasks/main.yml new file mode 100644 index 0000000..4da1957 --- /dev/null +++ b/roles/dch-storage-net/tasks/main.yml @@ -0,0 +1,29 @@ +- name: ensure wait-global-address script is installed + copy: + src=wait-global-address.sh + dest=/usr/local/libexec/wait-global-address.sh + mode=0755 +- name: ensure wait-global-address unit is installed + copy: + src=wait-global-address.service + dest=/etc/systemd/system/wait-global-address@.service + mode=0644 + notify: reload systemd + +- name: ensure wait-global-address service starts at boot + service: + name=wait-global-address@{{ storage_iface }}.service + enabled=yes +- name: ensure wait-global-address service is running + service: + name=wait-global-address@{{ storage_iface }}.service + state=started + +- name: ensure storage volumes are mounted + mount: + path={{ item.mountpoint }} + src={{ item.host }}:{{ item.share }} + fstype={{ item.fstype|d('nfs') }} + opts={{ item.opts|d(omit) }} + state=mounted + with_items: '{{ mount_shared_volumes }}'