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.