---
# .. vim: foldmarker=[[[,]]]:foldmethod=marker
#
# tasks file for flexlm

# Load vars [[[1
- name: Load specific OS vars
  ansible.builtin.include_vars: "{{ item }}"
  with_first_found:
    - files:
        - "{{ ansible_distribution|lower }}-{{ ansible_distribution_release }}.yml"
        - "{{ ansible_distribution|lower }}-{{ ansible_distribution_version }}.yml"
        - "{{ ansible_distribution_release }}.yml"
        - "{{ ansible_distribution|lower }}.yml"
        - "{{ ansible_os_family|lower }}.yml"
      skip: true

# Manage required system packages [[[1
- name: Ensure required packages are in there desired state
  ansible.builtin.package:
    name: '{{ flexlm__required_packages | flatten }}'
    state: '{{ "present" if (flexlm__deploy_state == "present") else "absent" }}'
    install_recommends: False
  register: flexlm_pkg_result
  until: flexlm_pkg_result is success

# user
- name: Create flexlm user
  ansible.builtin.user:
    name: '{{ flexlm__user_name }}'
    createhome: False
    system: True

# Create a symlink for /tmp [[[1
- name: Symlink /usr/tmp
  ansible.builtin.file:
    src: /tmp
    dest: /usr/tmp
    state: link

# Create a symlink for libs [[[1
- name: Symlinks to /lib64/ld-linux-x86-64.so.2
  ansible.builtin.file:
    src: /lib64/ld-linux-x86-64.so.2
    dest: '{{ item }}'
    state: link
  with_items:
    - /lib64/ld-lsb-x86-64.so.2
    - /lib64/ld-lsb-x86-64.so.3

# lmgrd and lmutil binaries [[[1
- name: Add lmgrd bin
  ansible.builtin.copy:
    src: '{{ flexlm__lmgrd_source + "." + flexlm__lmgrd_version }}'
    dest: '{{ flexlm__lmgrd_path + "." + flexlm__lmgrd_version }}'
    owner: '{{ flexlm__user_name }}'
    group: '{{ flexlm__user_name }}'
    mode: 0755

- name: Link to the last version of lmgrd
  ansible.builtin.file:
    src: '{{ flexlm__lmgrd_path + "." + flexlm__lmgrd_version }}'
    dest: '{{ flexlm__lmgrd_path }}'
    owner: '{{ flexlm__user_name }}'
    group: '{{ flexlm__user_name }}'
    state: link

- name: Add lmutil bin
  ansible.builtin.copy:
    src: '{{ flexlm__lmutil_source }}'
    dest: '{{ flexlm__lmutil_path }}'
    owner: '{{ flexlm__user_name }}'
    group: '{{ flexlm__user_name }}'
    mode: 0755

# VENDOR and licence [[[1
- name: Add VENDOR DAEMON
  ansible.builtin.copy:
    src: '{{ item.bin_src }}'
    dest: '{{ item.bin_path | d("/opt/" + item.name + "/bin") }}'
    owner: '{{ flexlm__user_name }}'
    group: '{{ flexlm__user_name }}'
    mode: 0754
  with_flattened:
    - '{{ flexlm__licences }}'
  when: (item.bin_src|d())
  notify: ['restart flexlm services']

- name: Add licence file
  ansible.builtin.copy:
    src: '{{ (item.lic_src | dirname) + "/" }}'  # Need a final "/"
    dest: '{{ (item.lic_path | d("/opt/" + item.name + "/etc/licence.lic")) | dirname }}'
    owner: '{{ flexlm__user_name }}'
    group: '{{ flexlm__user_name }}'
    mode: 0640
  with_flattened:
    - '{{ flexlm__licences }}'
  when: (item.lic_src|d())
  notify: ['restart flexlm services']

# Manage services [[[1

- name: Add systemd unit
  ansible.builtin.template:
    src: '{{ flexlm__service_unit_content }}'
    dest: '{{ "/etc/systemd/system/flexlm-" + item.name + ".service" }}'
    owner: 'root'
    group: 'root'
    mode: '0644'
  with_flattened:
    - '{{ flexlm__licences }}'
  when: ( (flexlm__deploy_state == "present") and
        ( item.service | d(True) ))
  notify: ['systemd daemon reload', 'restart flexlm services']

- name: Manage flexlm services
  ansible.builtin.service:
    name: '{{ "flexlm-" + item.name }}'
    state: '{{ "started" if (flexlm__deploy_state == "present" and (item.service | d(True) | bool)) else "stopped" }}'
    enabled: '{{ item.service | d(True) | bool }}'
  with_flattened:
    - '{{ flexlm__licences }}'
