---
- name: install package
  package:
    name: "{{ spiped_package_name }}"
    state: "{{ spiped_package_state }}"

- name: "create {{ spiped_user }} user"
  user:
    name: "{{ spiped_user }}"
    comment: "{{ spiped_user_comment }}"
    password: "{{ spiped_user_password }}"
    home: "{{ spiped_user_home }}"
    shell: "{{ spiped_user_shell }}"
    state: "{{ spiped_user_state }}"
    system: yes
    create_home: no

- name: create paths
  file:
    path: "{{ item }}"
    state: directory
    owner: root
    group: root
    mode: 0755
  loop:
    - "{{ spiped_etc_path }}"

- name: configure systemd unit
  template:
    src: spiped.service.j2
    dest: "/etc/systemd/system/spiped-{{ item.name }}.service"
    owner: root
    group: root
    mode: 0644
  loop: "{{ spiped_tunnels | default([]) }}"
  when:
    - ansible_service_mgr == 'systemd'
    - item.state | default('present') == 'present'
  notify:
    - spiped daemon-reload
    - restart spiped tunnels
  no_log: true

- name: configure keys
  copy:
    dest: "{{ spiped_etc_path }}/{{ item.name }}.key"
    content: "{{ item.key | b64decode }}"
    owner: "{{ spiped_user }}"
    group: "{{ spiped_group }}"
    mode: 0400
  loop: "{{ spiped_tunnels | default([]) }}"
  when:
    - ansible_service_mgr == 'systemd'
    - item.state | default('present') == 'present'
  notify:
    - restart spiped tunnels
  no_log: true

- name: manage services
  systemd:
    name: "spiped-{{ item.name }}.service"
    state: "{{ (item.state | default('present') == 'absent') | ternary('stopped', 'started') }}"
    enabled: "{{ item.state | default('present') != 'absent' }}"
    daemon_reload: true
  loop: "{{ spiped_tunnels | default([]) }}"
  no_log: true

- name: remove keys
  file:
    path: "{{ spiped_etc_path }}/{{ item.name }}.key"
    state: "absent"
  loop: "{{ spiped_tunnels | default([]) }}"
  when:
    - item.state is defined
    - item.state == "absent"
  no_log: true

- name: remove systemd unit
  file:
    path: "/etc/systemd/system/spiped-{{ item.name }}.service"
    state: "absent"
  loop: "{{ spiped_tunnels | default([]) }}"
  notify:
    - spiped daemon-reload
  when:
    - ansible_service_mgr == 'systemd'
    - item.state is defined
    - item.state == "absent"
  no_log: true