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.