Installeren van Java JDK 8 met Ansible

Hiervoor gaan we eerst een aantal variabelen in het bestand roles/common/default/main.yml plaatsen. De inhoud:

---
download_folder: /data/tmp
download_url: http://download.oracle.com/otn-pub/java/jdk/
download_hash: e758a0de34e24606bca991d704f6dcbf
download_tarball: jdk-8u151-linux-x64.tar.gz
download_version: 8u151-b12
download_name: jdk1.8.0_151
download_jdk: "{{download_url}}{{download_version}}/{{download_hash}}/{{download_tarball}}"
java_folder: "/opt/java"
java_name: "{{java_folder}}/{{download_name}}"
java_archive: "{{download_folder}}/{{download_tarball}}"
java_priority: 2000

Daarna kan de task gemaakt worden in roles/common/tasks/jdk.yml De inhoud:

---
- name: PRE-CHECK - if JDK already exists we're done! Let's get the version.
  stat: path={{java_name}}
  register: jdk_file

- block:
  - name: Download file with custom HTTP headers
    become: yes
    uri:
      url: "{{download_jdk}}"
      dest: "{{java_archive}}"
      headers: 
        Cookie: "oraclelicense=accept-securebackup-cookie"
      validate_certs: no
      use_proxy: yes
    environment: "{{proxy_env}}"

  - name: Create java directory in {{java_folder}}
    become: yes
    file:
      state: directory
      path: "{{java_folder}}"
      mode: 0755

  - name: Unpack archive from {{java_archive}} to {{java_folder}}
    become: yes
    unarchive:
      src: "{{java_archive}}"
      dest: "{{java_folder}}"
      remote_src: yes

  - name: Fix ownership of {{java_name}}
    become: yes
    file:
      state: directory
      path: "{{java_name}}"
      owner: root
      group: root
      recurse: yes

  - name: Make Java available for system
    become: yes
    command: "{{ item }}"
    with_items:
      - 'alternatives --install "/usr/bin/java" "java" "{{java_name}}/bin/java" {{java_priority}}'
      - 'alternatives --set  "java" "{{java_name}}/bin/java"'

  - name: Clean up
    become: yes
    file:
      state: absent
      path: "{{java_archive}}"

  when: jdk_file.stat.exists == False

- name: Get java version
  command: java -version
  register: java_version

- name: Show us the java version!
  debug: var=java_version.stderr_lines

Uitleg:

Als eerste wordt gekeken of er al een Java versie aanwezig is door in de {{java_name}} te kijken naar de versie die gewenst is. Hiervoor is de ‘stat‘-functie. Het  block dat hierna komt wordt alleen uitgevoerd als de uitkomst van de stat-functie False is (er is dus nog geen java versie die we willen).

Uitvoeren van het block bestaat uit het downloaden van de java-versie van de Oracle website. Hiervoor dient een hash meegegeven te worden die te vinden is op de bewuste file op de download site van Oracle.

Na het uitpakken in de juiste bestemming wordt met de Linux functie ‘alternatives’ de versie gezet met de prioriteit uit de variable.

Als laatste laat een java-commando de java-versie zien via het geregistreerde var ‘java_version’.
In de tasks-directory van de Ansible host kan main.yml zodanig aangepast worden zodat deze task included wordt:

- name: Install JDK 8
 include_tasks: jdk.yml
 tags: jdk

Je kunt dan daarna ook de tag ‘jdk‘ gebruiken om uitsluitend deze task uit te voeren.