/
/
/
1---
2# Runner Services - NFS Mount Configuration
3
4- name: Test NFS server connectivity
5 command: showmount -e {{ runner_nas_host }}
6 register: nfs_exports
7 failed_when: false
8 changed_when: false
9
10- name: Display available NFS exports
11 debug:
12 msg: |
13 NFS Server: {{ runner_nas_host }}
14 Available exports:
15 {{ nfs_exports.stdout if nfs_exports.rc == 0 else 'Unable to connect to NFS server' }}
16
17- name: Fail if NFS server is not accessible
18 fail:
19 msg: "Cannot connect to NFS server {{ runner_nas_host }}. Please verify NFS server is running and exports are configured."
20 when: nfs_exports.rc != 0
21
22- name: Create systemd mount units for NFS shares
23 template:
24 src: nfs-mount.mount.j2
25 dest: "/etc/systemd/system/{{ item.local_path | replace('/', '-') | regex_replace('^-', '') }}.mount"
26 owner: root
27 group: root
28 mode: '0644'
29 loop: "{{ runner_nfs_mounts }}"
30 become: yes
31 notify:
32 - reload systemd
33 - restart nfs mounts
34
35- name: Create systemd automount units for NFS shares
36 template:
37 src: nfs-mount.automount.j2
38 dest: "/etc/systemd/system/{{ item.local_path | replace('/', '-') | regex_replace('^-', '') }}.automount"
39 owner: root
40 group: root
41 mode: '0644'
42 loop: "{{ runner_nfs_mounts }}"
43 become: yes
44 notify:
45 - reload systemd
46 - restart nfs mounts
47
48- name: Create fstab entries for NFS mounts (backup)
49 lineinfile:
50 path: /etc/fstab
51 line: "{{ item.host }}:{{ item.nfs_path }} {{ item.local_path }} nfs {{ item.options }},noauto,x-systemd.automount,x-systemd.device-timeout=10 0 0"
52 regexp: "{{ item.local_path }}"
53 state: present
54 backup: yes
55 loop: "{{ runner_nfs_mounts }}"
56 become: yes
57
58- name: Flush handlers to ensure systemd is reloaded
59 meta: flush_handlers
60
61- name: Unmount existing NFS mounts before setting up automount
62 shell: |
63 if mountpoint -q "{{ item.local_path }}"; then
64 umount "{{ item.local_path }}" || true
65 fi
66 loop: "{{ runner_nfs_mounts }}"
67 become: true
68
69- name: Enable and start NFS automount units
70 systemd:
71 name: "{{ item.local_path | replace('/', '-') | regex_replace('^-', '') }}.automount"
72 state: started
73 enabled: yes
74 daemon_reload: yes
75 loop: "{{ runner_nfs_mounts }}"
76 become: yes
77
78- name: Test NFS mount accessibility
79 stat:
80 path: "{{ item.local_path }}"
81 register: nfs_mount_test
82 loop: "{{ runner_nfs_mounts }}"
83
84- name: Create test file on each NFS mount to verify write access
85 file:
86 path: "{{ item.local_path }}/.runner-test"
87 state: touch
88 owner: "{{ runner_user }}"
89 group: "{{ runner_group }}"
90 loop: "{{ runner_nfs_mounts }}"
91 register: nfs_write_test
92 failed_when: false
93
94- name: Remove test files
95 file:
96 path: "{{ item.local_path }}/.runner-test"
97 state: absent
98 loop: "{{ runner_nfs_mounts }}"
99 when: nfs_write_test is succeeded
100
101- name: Display NFS mount status
102 debug:
103 msg: |
104 NFS Mount Configuration:
105 {% for mount in runner_nfs_mounts %}
106 - {{ mount.name }}: {{ mount.host }}:{{ mount.nfs_path }} â {{ mount.local_path }}
107 Status: {{ 'Mounted and writable' if nfs_write_test.results[loop.index0] is succeeded else 'Mount failed or read-only' }}
108 {% endfor %}
109
110- name: Create NFS mount monitoring script
111 template:
112 src: nfs-mount-check.sh.j2
113 dest: /usr/local/bin/runner-nfs-check.sh
114 owner: root
115 group: root
116 mode: '0755'
117 become: yes
118
119- name: Create systemd timer for NFS mount monitoring
120 template:
121 src: nfs-mount-monitor.timer.j2
122 dest: /etc/systemd/system/runner-nfs-monitor.timer
123 owner: root
124 group: root
125 mode: '0644'
126 become: yes
127 notify:
128 - reload systemd
129
130- name: Create systemd service for NFS mount monitoring
131 template:
132 src: nfs-mount-monitor.service.j2
133 dest: /etc/systemd/system/runner-nfs-monitor.service
134 owner: root
135 group: root
136 mode: '0644'
137 become: yes
138 notify:
139 - reload systemd
140
141- name: Enable NFS mount monitoring timer
142 systemd:
143 name: runner-nfs-monitor.timer
144 state: started
145 enabled: yes
146 daemon_reload: yes
147 become: yes