Skip to content

Commit 5351c64

Browse files
committed
make systemd role more generic
1 parent 4d51467 commit 5351c64

File tree

4 files changed

+60
-22
lines changed

4 files changed

+60
-22
lines changed

ansible/roles/systemd/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# systemd
2+
3+
Create drop-in files for systemd services.
4+
5+
# Role Variables
6+
- `systemd_dropins`: Required. A mapping where keys = systemd service name, values are a dict as follows:
7+
- `group`: Required str. Inventory group this drop-in applies to.
8+
- `comment`: Optional str. Comment describing reason for drop-in.
9+
- `content`: Required str. Content of drop-in file.
10+
# systemd
11+
12+
Create drop-in files for systemd services.
13+
14+
# Role Variables
15+
- `systemd_dropins`: Required. A mapping where keys = systemd service name, values are a dict as follows:
16+
- `group`: Required str. Inventory group this drop-in applies to.
17+
- `comment`: Optional str. Comment describing reason for drop-in.
18+
- `content`: Required str. Content of drop-in file.

ansible/roles/systemd/tasks/main.yml

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,37 @@
1-
2-
# NB: As `appliances_persistent_services` is defined in group_vars/all, all tasks here are conditional
1+
# NB: As `systemd_TODO:` is defined in group_vars/all, all tasks here are conditional on group.
32
- name: Make directory for unit dropins
43
file:
54
path: "/etc/systemd/system/{{ item.key }}.service.d/"
65
state: directory
7-
loop: "{{ appliances_persistent_services | dict2items }}"
8-
when: "'item.value' in group_names"
6+
owner: root
7+
group: root
8+
mode: 0644
9+
loop: "{{ systemd_dropins | dict2items }}"
10+
when: "item.value.group in group_names"
911

1012
- name: Add dropins for unit files
1113
ansible.builtin.copy:
1214
content: |
13-
[Unit]
14-
RequiresMountsFor={{ appliances_state_dir }}
15-
dest: "/etc/systemd/system/{{ item.key }}.service.d/appliance_state.conf"
16-
loop: "{{ appliances_persistent_service | dict2items }}"
17-
register: _systemd_persistent_services_dropins
18-
when: "'item.value' in group_names"
15+
# {{ item.value.comment | default('slurm appliance generated') }}
16+
{{ item.value.content }}
17+
dest: "/etc/systemd/system/{{ item.key }}.service.d/slurm_app.conf"
18+
owner: root
19+
group: root
20+
mode: 0644
21+
loop: "{{ systemd_dropins | dict2items }}"
22+
register: _systemd_dropins
23+
when: "item.value.group in group_names"
1924

2025
- name: Reload unit definitions
2126
ansible.builtin.shell:
2227
cmd: systemctl daemon-reload
23-
when: _systemd_persistent_services_dropins.changed
28+
when: _systemd_dropins.changed
2429

2530
- name: Reload units
2631
ansible.builtin.systemd:
2732
name: "{{ item.key }}"
2833
state: restarted
29-
loop: "{{ appliances_persistent_service | dict2items }}"
34+
loop: "{{ systemd_dropins | dict2items }}"
3035
when:
31-
- _systemd_persistent_services_dropins.changed
32-
- "'item.value' in group_names"
33-
# - "'builder' not in group_names" # because mount of appliances_state_dir won't be done in builder
36+
- _systemd_dropins.changed
37+
- "item.value.group in group_names"

environments/common/inventory/group_vars/all/defaults.yml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,6 @@ ansible_user: rocky
44
appliances_repository_root: "{{ lookup('env', 'APPLIANCES_REPO_ROOT') }}"
55
appliances_environment_root: "{{ lookup('env', 'APPLIANCES_ENVIRONMENT_ROOT') }}"
66
#appliances_state_dir: # define an absolute path here to use for persistent state
7-
appliances_persistent_services: # dict of service:role requiring appliances_state_dir
8-
# mysql not included as it role handles state dir correctly
9-
opendistro: opendistro
10-
grafana-server: grafana
11-
slurmdbd: openhpc
12-
slurmctld: openhpc
13-
prometheus: prometheus
147

158
# Address(ip/dns) for internal communication between services. This is
169
# normally traffic you do no want to expose to users.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
_systemd_requiresmount_statedir: |
2+
[Unit]
3+
RequiresMountsFor={{ appliances_state_dir }}
4+
5+
_systemd_dropins_statedir:
6+
# mysql not included as role handles state dir correctly
7+
opendistro:
8+
group: opendistro
9+
content: "{{ _systemd_requiresmount_statedir }}"
10+
grafana-server:
11+
group: grafana
12+
content: "{{ _systemd_requiresmount_statedir }}"
13+
slurmdbd:
14+
group: openhpc
15+
content: "{{ _systemd_requiresmount_statedir }}"
16+
slurmctld:
17+
group: openhpc
18+
content: "{{ _systemd_requiresmount_statedir }}"
19+
prometheus:
20+
group: prometheus
21+
content: "{{ _systemd_requiresmount_statedir }}"
22+
23+
systemd_dropins: "{{ _systemd_dropins_statedir if appliances_state_dir is defined else {} }}"

0 commit comments

Comments
 (0)