/
/
/
Ansible role that deployes services on my runner machine
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: Enable and start NFS automount units
62 systemd:
63 name: "{{ item.local_path | replace('/', '-') | regex_replace('^-', '') }}.automount"
64 state: started
65 enabled: yes
66 daemon_reload: yes
67 loop: "{{ runner_nfs_mounts }}"
68 become: yes
69 check_mode: no
70
71- name: Test NFS mount accessibility
72 stat:
73 path: "{{ item.local_path }}"
74 register: nfs_mount_test
75 loop: "{{ runner_nfs_mounts }}"
76
77- name: Create test file on each NFS mount to verify write access
78 file:
79 path: "{{ item.local_path }}/.runner-test"
80 state: touch
81 owner: "{{ runner_user }}"
82 group: "{{ runner_group }}"
83 loop: "{{ runner_nfs_mounts }}"
84 register: nfs_write_test
85 failed_when: false
86 check_mode: no
87
88- name: Remove test files
89 file:
90 path: "{{ item.local_path }}/.runner-test"
91 state: absent
92 loop: "{{ runner_nfs_mounts }}"
93 when: nfs_write_test is succeeded
94 check_mode: no
95
96- name: Display NFS mount status
97 debug:
98 msg: |
99 NFS Mount Configuration:
100 {% for mount in runner_nfs_mounts %}
101 - {{ mount.name }}: {{ mount.host }}:{{ mount.nfs_path }} â {{ mount.local_path }}
102 Status: {{ 'Mounted and writable' if nfs_write_test.results[loop.index0] is succeeded else 'Mount failed or read-only' }}
103 {% endfor %}
104
105- name: Create NFS mount monitoring script
106 template:
107 src: nfs-mount-check.sh.j2
108 dest: /usr/local/bin/runner-nfs-check.sh
109 owner: root
110 group: root
111 mode: '0755'
112 become: yes
113
114- name: Create systemd timer for NFS mount monitoring
115 template:
116 src: nfs-mount-monitor.timer.j2
117 dest: /etc/systemd/system/runner-nfs-monitor.timer
118 owner: root
119 group: root
120 mode: '0644'
121 become: yes
122 notify:
123 - reload systemd
124
125- name: Create systemd service for NFS mount monitoring
126 template:
127 src: nfs-mount-monitor.service.j2
128 dest: /etc/systemd/system/runner-nfs-monitor.service
129 owner: root
130 group: root
131 mode: '0644'
132 become: yes
133 notify:
134 - reload systemd
135
136- name: Enable NFS mount monitoring timer
137 systemd:
138 name: runner-nfs-monitor.timer
139 state: started
140 enabled: yes
141 daemon_reload: yes
142 become: yes
143 check_mode: no