---
- name: Install prereqs
  package:
    name:
      - gcc
    state: present

- name: Extract heyu tarball v{{ heyu_version }}.tar.gz
  unarchive:
    src: v{{ heyu_version }}.tar.gz
    dest: /usr/local/src/
    creates: /usr/local/src/heyu-{{ heyu_version }}/
  register: heyu_copy

- name: Create heyu user
  user:
    name: "{{ heyu_user }}"
    system: yes
    groups: dialout
    append: yes
    state: present

- name: Create heyu config dir
  file:
    path: /etc/heyu
    state: directory
    owner: "{{ heyu_user }}"
    group: root
    mode: '0755'

- name: Copy heyu config
  template:
    src: x10.conf.j2
    dest: /etc/heyu/x10.conf
    owner: "{{ heyu_user }}"
    group: root
    mode: '0644'
  notify:
    - restart heyu
  tags:
    - update

- name: Compile and install heyu
  shell: "{{ item }}"
  args:
    chdir: /usr/local/src/heyu-{{ heyu_version }}
  loop:
    - './Configure'
    - 'make'
    - 'make install'
  when:
    - not heyu_copy.skipped

- name: Create systemd service files
  template:
    src: "{{ item.src }}"
    dest: /etc/systemd/system/{{ item.dest }}
    owner: root
    group: root
    mode: '0644'
  loop:
    - { src: 'heyu.service.j2', dest: 'heyu.service' }
    - { src: 'x10-symlink.service.j2', dest: 'x10-symlink.service' }
  loop_control:
    label: "{{ item.dest }}"
  register: services

- name: Reload systemd service files
  systemd:
    daemon_reload: yes
  when: services.changed

- name: Start/enable systemd services
  systemd:
    name: "{{ item }}"
    state: started
    enabled: yes
  loop:
    - x10-symlink
    - heyu

- name: Enable cronjobs
  cron:
    name: "{{ item.name }}"
    minute: "{{ item.minute | default('*') }}"
    hour: "{{ item.hour | default('*') }}"
    dom: "{{ item.dom | default('*') }}"
    month: "{{ item.month | default('*') }}"
    dow: "{{ item.dow | default('*') }}"
    job: "{{ item.job }}"
  with_items:
    - "{{ heyu_cronjobs }}"
  loop_control:
    label: "{{ item.name }}"
  when:
    - item.name is defined
    - item.name != ''
    - item.job is defined
    - item.job != ''
  tags:
    - update