- name: Java Install playbook
  hosts:
  - all

  tasks:
  - name: Java | Install | Copy scripts to server
    copy:
      src="{{ playbook_dir }}/../assets/files/check-java-version.sh"
      dest="{{ java_download_path }}/"
      mode="a+x"
    tags: java

  - name: Java | Install | Check if Java {{ jdk_version }} is already installed
    shell:
      LC_ALL="en_US.UTF-8"  {{ java_download_path }}/check-java-version.sh  "{{ jdk_version }}"
    register: jdk_info
    changed_when: false
    failed_when: jdk_info.rc > 0
    tags: java

  - name: Java | Install | Set update_java flag if version is not currently installed.
    when: (jdk_info.stdout|from_json).not_found
    set_fact:
      update_java: true
    tags: java

  - name: Java | Install | Status Update
    debug: msg="Java v{{ jdk_version }} already exists. Skipping Installation"
    when: update_java is not defined
    tags: java

  - block:

      - name: Java | Install | Get JDK tarball (as tar.gz file)
        get_url:
          url="{{ jdk_tarball_url }}"
          dest="{{ java_download_path }}/{{ jdk_tarball_file }}.tar.gz"
        tags: java

      - name: Java | Install | Check for Java Install Dir ({{ java_install_dir }})
        file:
          path="{{ java_install_dir }}"
          state=directory
          owner=root
          group=root
          mode=0755
          force=yes
          setype=default_t
          directory_mode=yes
        tags: java

      - name: Java | Install | Install JDK via tarball file
        shell: tar -xvf {{ java_download_path }}/{{ jdk_tarball_file }}.tar.gz -C {{ java_install_dir }}
        tags: java

      - name: Java | Install | link "{{ java_install_dir }}/{{ java_default_link_name }}"
        file:
          dest: "{{ java_install_dir }}/{{ java_default_link_name }}"
          src: "{{ java_install_dir }}/jdk{{ jdk_version }}"
          state: link
        tags: java

      - name: Java | Install | Alternatives link for "java"
        alternatives:
          name: java
          link: /usr/bin/java
          path: "{{ java_install_dir }}/{{ java_default_link_name }}/bin/java"
        tags: java

      - name: Java | Install | Alternatives link for "javac"
        alternatives:
          name: javac
          link: /usr/bin/javac
          path: "{{ java_install_dir }}/{{ java_default_link_name }}/bin/javac"
        tags: java

      - name: Java | Install | Alternatives link for "jar"
        alternatives:
          name: jar
          link: /usr/bin/jar
          path: "{{ java_install_dir }}/{{ java_default_link_name }}/bin/jar"
        tags: java

    when:
      - update_java is defined
      - update_java

  - block:

      - name: Java | Install | Make sure /etc/profile.d exists
        file:
          path=/etc/profile.d
          state=directory
        tags: java

      - name: Java | Install | Export JAVA_HOME
        template:
          src={{ playbook_dir }}/../assets/templates/java_home.sh.j2
          dest=/etc/profile.d/java_home.sh
          mode="a+x"
          owner=root
          group=root
          force=yes
          setype=bin_t
        tags: java

    when:
      - update_java is defined
      - update_java
      - java_set_javahome

  - name: Java | Install | remove temporary downloaded files, if requested
    file: path={{ item }} state=absent
    with_items:
      - "{{ java_download_path }}/{{ jdk_tarball_file }}.tar.gz"
      - "/data/apps/java/jdk1.8.0_91"
    ignore_errors: true
    when: java_remove_download
    tags: java
