/
/
/
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: Stop and disable legacy NFS automount units
23 systemd:
24 name: "{{ item.local_path | replace('/', '-') | regex_replace('^-', '') }}.automount"
25 state: stopped
26 enabled: no
27 loop: "{{ runner_nfs_mounts }}"
28 become: yes
29 failed_when: false
30
31- name: Remove legacy NFS automount unit files
32 file:
33 path: "/etc/systemd/system/{{ item.local_path | replace('/', '-') | regex_replace('^-', '') }}.automount"
34 state: absent
35 loop: "{{ runner_nfs_mounts }}"
36 become: yes
37 notify: reload systemd
38
39- name: Create systemd mount units for NFS shares
40 template:
41 src: nfs-mount.mount.j2
42 dest: "/etc/systemd/system/{{ item.local_path | replace('/', '-') | regex_replace('^-', '') }}.mount"
43 owner: root
44 group: root
45 mode: '0644'
46 loop: "{{ runner_nfs_mounts }}"
47 become: yes
48 notify:
49 - reload systemd
50 - restart nfs mounts
51
52- name: Create fstab entries for NFS mounts
53 lineinfile:
54 path: /etc/fstab
55 line: "{{ item.host }}:{{ item.nfs_path }} {{ item.local_path }} nfs {{ runner_nfs_options }},_netdev,x-systemd.device-timeout=10 0 0"
56 regexp: "{{ item.local_path }}"
57 state: present
58 backup: yes
59 loop: "{{ runner_nfs_mounts }}"
60 become: yes
61
62- name: Flush handlers to ensure systemd is reloaded
63 meta: flush_handlers
64
65- name: Enable and start NFS mount units
66 systemd:
67 name: "{{ item.local_path | replace('/', '-') | regex_replace('^-', '') }}.mount"
68 state: started
69 enabled: yes
70 daemon_reload: yes
71 loop: "{{ runner_nfs_mounts }}"
72 become: yes
73 check_mode: no
74
75- name: Test NFS mount accessibility
76 stat:
77 path: "{{ item.local_path }}"
78 register: nfs_mount_test
79 loop: "{{ runner_nfs_mounts }}"
80
81- name: Create test file on each NFS mount to verify write access
82 file:
83 path: "{{ item.local_path }}/.runner-test"
84 state: touch
85 owner: "{{ runner_user }}"
86 group: "{{ runner_group }}"
87 loop: "{{ runner_nfs_mounts }}"
88 register: nfs_write_test
89 failed_when: false
90 check_mode: no
91
92- name: Remove test files
93 file:
94 path: "{{ item.local_path }}/.runner-test"
95 state: absent
96 loop: "{{ runner_nfs_mounts }}"
97 when: nfs_write_test is succeeded
98 check_mode: no
99
100- name: Display NFS mount status
101 debug:
102 msg: |
103 NFS Mount Configuration:
104 {% for mount in runner_nfs_mounts %}
105 - {{ mount.name }}: {{ mount.host }}:{{ mount.nfs_path }} â {{ mount.local_path }}
106 Status: {{ 'Mounted and writable' if nfs_write_test.results[loop.index0] is succeeded else 'Mount failed or read-only' }}
107 {% endfor %}
108
109- name: Create NFS mount monitoring script
110 template:
111 src: nfs-mount-check.sh.j2
112 dest: /usr/local/bin/runner-nfs-check.sh
113 owner: root
114 group: root
115 mode: '0755'
116 become: yes
117
118- name: Create systemd timer for NFS mount monitoring
119 template:
120 src: nfs-mount-monitor.timer.j2
121 dest: /etc/systemd/system/runner-nfs-monitor.timer
122 owner: root
123 group: root
124 mode: '0644'
125 become: yes
126 notify:
127 - reload systemd
128
129- name: Create systemd service for NFS mount monitoring
130 template:
131 src: nfs-mount-monitor.service.j2
132 dest: /etc/systemd/system/runner-nfs-monitor.service
133 owner: root
134 group: root
135 mode: '0644'
136 become: yes
137 notify:
138 - reload systemd
139
140- name: Enable NFS mount monitoring timer
141 systemd:
142 name: runner-nfs-monitor.timer
143 state: started
144 enabled: yes
145 daemon_reload: yes
146 become: yes
147 check_mode: no
148