--- # Copyright 2017, Rackspace US, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - name: Pull systemd version command: "systemctl --version" changed_when: false register: get_systemd_version tags: # Avoid ANSIBLE0006 lint issue: systemctl used in place of systemd module - skip_ansible_lint - always - name: Set systemd version set_fact: systemd_version: "{{ get_systemd_version.stdout_lines[0].split()[-1] }}" tags: - always - name: Create TEMP run dir file: path: "{{ item.systemd_run_dir | default(systemd_run_dir) }}/{{ item.service_name | replace(' ', '_') }}" state: directory owner: "{{ item.systemd_user_name | default(systemd_user_name) }}" group: "{{ item.systemd_group_name | default(systemd_group_name) }}" mode: "02755" with_items: "{{ systemd_services }}" tags: - systemd-service - name: Create TEMP service lock dir file: path: "{{ item.systemd_lock_dir | default(systemd_lock_dir) }}/{{ item.service_name | replace(' ', '_') }}" state: directory owner: "{{ item.systemd_user_name | default(systemd_user_name) }}" group: "{{ item.systemd_group_name | default(systemd_group_name) }}" mode: "02755" with_items: "{{ systemd_services }}" when: - (item.systemd_lock_path is not defined) and (systemd_lock_path is not defined) tags: - systemd-service - name: Create TEMP defined lock path file: path: "{{ item.systemd_lock_path | default(systemd_lock_path) }}" state: directory owner: "{{ item.systemd_user_name | default(systemd_user_name) }}" group: "{{ item.systemd_group_name | default(systemd_group_name) }}" mode: "02755" when: - (item.systemd_lock_path is defined) or (systemd_lock_path is defined) with_items: "{{ systemd_services }}" tags: - systemd-service - name: Create service.d overrides dir file: path: "/etc/systemd/system/{{ item.service_name | replace(' ', '_') }}.service.d" state: directory owner: "{{ item.systemd_user_name | default(systemd_user_name) }}" group: "{{ item.systemd_group_name | default(systemd_group_name) }}" mode: "02755" when: "'systemd_overrides' in item" with_items: "{{ systemd_services }}" tags: - systemd-service - name: Create tmpfiles.d entry template: src: "systemd-tmpfiles.j2" dest: "/etc/tmpfiles.d/{{ item.systemd_tempd_prefix | default(systemd_tempd_prefix) }}-{{ item.service_name | replace(' ', '_') }}.conf" mode: "0644" owner: "root" group: "root" with_items: "{{ systemd_services }}" tags: - systemd-service - name: Place the systemd service config_template: src: "systemd-service.j2" dest: "/etc/systemd/system/{{ item.service_name | replace(' ', '_') }}.service" mode: "0644" owner: "root" group: "root" config_overrides: "{{ item.config_overrides | default(systemd_service_config_overrides) }}" config_type: "ini" with_items: "{{ systemd_services }}" when: not (item.systemd_overrides_only | default(False) | bool) notify: - systemd service changed register: systemd_services_result tags: - systemd-service - name: Place the systemd override template: src: "systemd-service-overrides.j2" dest: "/etc/systemd/system/{{ item.service_name | replace(' ', '_') }}.service.d/override.conf" mode: "0644" owner: "root" group: "root" with_items: "{{ systemd_services }}" when: "'systemd_overrides' in item" notify: - systemd service changed tags: - systemd-service - name: Place the systemd timer template: src: "systemd-timer.j2" dest: "/etc/systemd/system/{{ item.service_name | replace(' ', '_') }}.timer" mode: "0644" owner: "root" group: "root" when: - item.timer is defined with_items: "{{ systemd_services }}" notify: - systemd service changed register: systemd_timer_result tags: - systemd-service - name: Place the systemd socket template: src: "systemd-socket.j2" dest: "/etc/systemd/system/{{ item.1.socket_name | replace(' ', '_') }}.socket" mode: "0644" owner: "root" group: "root" loop: "{{ systemd_services | subelements('sockets', skip_missing=True) }}" notify: - systemd service changed register: systemd_socket tags: - systemd-service - name: Reload systemd on unit change systemd: daemon_reload: yes when: - (systemd_services_result is changed) or (systemd_timer_result is changed) or ('true' in systemd_socket.results | map(attribute='changed') | list ) - name: Load service systemd: name: "{{ item.service_name | replace(' ', '_') }}.service" enabled: "{{ item.enabled | default(systemd_service_enabled) }}" state: "{{ (item.timer is defined) | ternary(omit, (item.state | default(omit))) }}" with_items: "{{ systemd_services }}" tags: - systemd-service - name: Load timer systemd: name: "{{ item.service_name | replace(' ', '_') }}.timer" enabled: "{{ item.enabled | default(systemd_service_enabled) }}" state: "{{ item.timer.state | default(omit) }}" when: - item.timer is defined with_items: "{{ systemd_services }}" tags: - systemd-service - name: Load socket systemd: name: "{{ item.socket_name | replace(' ', '_') }}.socket" enabled: "{{ item.enabled | default(systemd_service_enabled) }}" state: "{{ item.state | default(omit) }}" loop: "{{ systemd_services | selectattr('sockets', 'defined') | map(attribute='sockets') | flatten(1) }}" tags: - systemd-service