Files

72 lines
2.1 KiB
YAML

# SPDX-FileCopyrightText: 2025 Max Mehl <https://mehl.mx>
#
# SPDX-License-Identifier: Apache-2.0
---
- name: Set template file name
ansible.builtin.set_fact:
template: "{{ service }}.service.j2"
when: template is not defined
- name: Install required dependencies
ansible.builtin.apt:
pkg:
- systemd-container # necessary to use machinectl
install_recommends: false
- name: Register user info of {{ user }}
ansible.builtin.user:
name: "{{ user }}"
check_mode: true
register: user_info
- name: Ensure user systemd directory exists
ansible.builtin.file:
path: "{{ user_info.home }}/.config/systemd/user/"
state: directory
mode: "0755"
owner: "{{ user }}"
group: "{{ user }}"
- name: Ensure systemd service file is present (template)
ansible.builtin.template:
src: "{{ template }}"
dest: "{{ user_info.home }}/.config/systemd/user/{{ service }}.service"
mode: "0644"
owner: "{{ user }}"
group: "{{ user }}"
when: copy_file is not defined
- name: Ensure systemd service file is present (copy)
ansible.builtin.copy:
src: "{{ copy_file }}"
dest: "{{ user_info.home }}/.config/systemd/user/{{ service }}.service"
mode: "0644"
owner: "{{ user }}"
group: "{{ user }}"
when: copy_file is defined
- name: "Check whether user is lingering: {{ user }}"
ansible.builtin.stat:
path: "/var/lib/systemd/linger/{{ user }}"
register: user_lingering
- name: Ensure systemd lingering is enabled for user {{ user }}
ansible.builtin.command: loginctl enable-linger {{ user }}
changed_when: false
when: not user_lingering.stat.exists
- name: Ensure systemd service is running and enabled
ansible.builtin.systemd_service:
name: "{{ service }}"
state: "{{ systemd_state }}"
enabled: "{{ systemd_enabled }}"
daemon_reload: "{{ systemd_daemon_reload }}"
scope: user
become: true
become_user: "{{ user }}"
become_method: ansible.builtin.sudo
environment:
XDG_RUNTIME_DIR: "/run/user/{{ user_info.uid }}"
DBUS_SESSION_BUS_ADDRESS: "unix:path=/run/user/{{ user_info.uid }}/bus"