---

- name: Create script dir
  file: path=/opt/ansible/timers state=directory
  tags: system,cron

- name: List unmanaged scripts
  shell: find /opt/ansible/timers -maxdepth 1 -mindepth 1 -type f -exec basename "{}" \;
  changed_when: False
  register: system_timers_current_scripts
  tags: system,cron

- name: Remove unmanaged timer's scripts
  file: path=/opt/ansible/timers/{{ item }} state=absent
  when: item not in system_timers_managed
  loop: "{{ system_timers_current_scripts.stdout_lines }}"
  tags: system,cron

- name: List unmanaged timers service unit
  shell: find /etc/systemd/system -maxdepth 1 -mindepth 1 -type f -name timer-ansible-*.service -exec basename "{}" \; | perl -pe 's/timer\-ansible\-([\w\-_]+)\.service/$1/g'
  changed_when: False
  register: system_timers_current_service
  tags: system,cron

- name: Disable unmanaged timers
  systemd: name=timer-ansible-{{ item }}.timer state=stopped enabled=False
  when: item not in system_timers_managed
  loop: "{{ system_timers_current_service.stdout_lines }}"
  tags: system,cron

- name: Remove unmanaged timers service unit
  file: path=/etc/systemd/system/timer-ansible-{{ item.0 }}.{{ item.1 }} state=absent
  when: item.0 not in system_timers_managed
  with_nested:
    - "{{ system_timers_current_service.stdout_lines }}"
    - - service
      - timer
  tags: system,cron

- name: Deploy scripts
  copy:
    content: |
      {% if not item.command is search('^#!') %}
      #!/bin/bash -e
      {% endif %}
      {{ item.command }}
    dest: /opt/ansible/timers/{{ item.id }}
    mode: 0700
    owner: "{{ item.user }}"
  loop: "{{ system_timers }}"
  tags: system,cron

- name: Deploy service units
  copy:
    content: |
      [Unit]
      Description={{ item.description }}

      [Service]
      Type=oneshot
      PrivateTmp=yes
      ExecStart=/opt/ansible/timers/{{ item.id }}
      User={{ item.user }}
      TimeoutSec={{ item.max_duration }}
      StandardOutput=journal
      StandardError=journal
    dest: /etc/systemd/system/timer-ansible-{{ item.id }}.service
  loop: "{{ system_timers }}"
  tags: system,cron

- name: Deploy timer units
  copy:
    content: |
      [Unit]
      Description={{ item.description }}

      [Timer]
      OnCalendar={{ item.calendar }}
      Persistent={{ item.persistent | ternary('True','False') }}

      [Install]
      WantedBy=timers.target
    dest: /etc/systemd/system/timer-ansible-{{ item.id }}.timer
  loop: "{{ system_timers }}"
  tags: system,cron

- name: Reload systemd
  systemd: daemon_reload=True
  tags: system,cron

- name: Enable timers
  systemd: name=timer-ansible-{{ item.id }}.timer state={{ item.enabled | ternary('started','stopped') }} enabled={{ item.enabled }}
  loop: "{{ system_timers }}"
  tags: system,cron
