- name: 'configure systemd unit {{ systemd_unit_name }}' copy: dest: '/etc/systemd/system/{{ systemd_unit_name }}' content: | # ansible managed {{ systemd_unit_config }} mode: a=r register: _config_file when: systemd_unit_config is defined - name: 'configure systemd unit {{ systemd_unit_name }} via drop-in config' copy: # > Along with a unit file foo.service, a "drop-in" directory foo.service.d/ may # > exist. All files with the suffix ".conf" from this directory will be parsed # > after the unit file itself is parsed. dest: '/etc/systemd/system/{{ systemd_unit_name }}.d/override.conf' content: | # ansible managed {{ systemd_unit_dropin_config }} mode: a=r register: _dropin_config_file when: systemd_unit_dropin_config is defined - name: 'fetch state of systemd unit {{ systemd_unit_name }}' systemd: name: '{{ systemd_unit_name }}' register: _unit when: _config_file.changed or _dropin_config_file.changed or systemd_unit_restart_if_active - name: 'set state of systemd unit {{ systemd_unit_name }}' systemd: daemon_reload: '{{ _config_file.changed or _dropin_config_file.changed }}' name: '{{ systemd_unit_name }}' enabled: '{{ systemd_unit_enabled | default(omit) }}' # > `started'/`stopped' are idempotent actions [...] # > `restarted' will always bounce the service state: >- {{ "restarted" if (systemd_unit_state is not defined or systemd_unit_state != "stopped") and (_config_file.changed or _dropin_config_file.changed or systemd_unit_restart_if_active) and 'ActiveState' in _unit.status and _unit.status.ActiveState == "active" else systemd_unit_state | default(omit) }} when: >- _config_file.changed or _dropin_config_file.changed or systemd_unit_enabled is defined or systemd_unit_state is defined or (systemd_unit_restart_if_active and 'ActiveState' in _unit.status and _unit.status.ActiveState == "active")