--- # On Linux `multica daemon autostart enable` writes a systemd *user* unit. # A user unit does not start at boot unless the user lingers — without this the # daemon only comes back when someone logs in, which on a headless agent host # is never. - name: Daemon | Enable systemd lingering for the daemon user ansible.builtin.command: argv: ["loginctl", "enable-linger", "{{ multica_user }}"] creates: "/var/lib/systemd/linger/{{ multica_user }}" become: true when: - multica_enable_linger | bool - multica_autostart | bool - name: Daemon | Wait for the user's runtime directory ansible.builtin.wait_for: path: "/run/user/{{ _multica_uid }}" state: present timeout: 30 become: true when: - multica_enable_linger | bool - multica_autostart | bool - name: Daemon | Read the current autostart registration ansible.builtin.command: argv: "{{ _multica_cmd + ['daemon', 'autostart', 'status'] }}" become: true become_user: "{{ multica_user }}" environment: "{{ _multica_user_env }}" register: _multica_autostart_status changed_when: false failed_when: false check_mode: false - name: Daemon | Register boot autostart ansible.builtin.command: argv: "{{ _multica_cmd + ['daemon', 'autostart', 'enable'] }}" become: true become_user: "{{ multica_user }}" environment: "{{ _multica_user_env }}" when: - multica_autostart | bool - _multica_autostart_status.rc != 0 or 'enabled' not in (_multica_autostart_status.stdout | default('') | lower) changed_when: true - name: Daemon | Read daemon status ansible.builtin.command: argv: "{{ _multica_cmd + ['daemon', 'status', '--output', 'json'] }}" become: true become_user: "{{ multica_user }}" environment: "{{ _multica_user_env }}" register: _multica_daemon_status changed_when: false failed_when: false check_mode: false - name: Daemon | Start it if it is not already running ansible.builtin.command: argv: "{{ _multica_cmd + ['daemon', 'start'] }}" become: true become_user: "{{ multica_user }}" environment: "{{ _multica_user_env }}" when: >- _multica_daemon_status.rc != 0 or ((_multica_daemon_status.stdout | from_json).status | default('')) != 'running' changed_when: true # Anything that changed the binary, the config or the credentials restarts the # daemon here, before verification reads its state back. - name: Daemon | Flush handlers ansible.builtin.meta: flush_handlers