runner

Ansible role that deployes services on my runner machine

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