From 7f964409f7a3711819dde7d6eace6f5c08c6fed9 Mon Sep 17 00:00:00 2001 From: Aidan Feldman Date: Thu, 18 May 2017 18:39:03 -0400 Subject: [PATCH 1/2] use Oracle Java JDK --- .gitignore | 3 +- README.md | 1 + defaults/main.yml | 7 - meta/main.yml | 5 + tests/requirements.yml | 1 + tests/roles/williamyeh.oracle-java/.gitignore | 2 + .../roles/williamyeh.oracle-java/.travis.yml | 17 ++ tests/roles/williamyeh.oracle-java/LICENSE | 202 ++++++++++++++++++ tests/roles/williamyeh.oracle-java/README.md | 158 ++++++++++++++ .../roles/williamyeh.oracle-java/Vagrantfile | 37 ++++ tests/roles/williamyeh.oracle-java/circle.yml | 44 ++++ .../williamyeh.oracle-java/defaults/main.yml | 21 ++ .../files/check-java-version.sh | 19 ++ .../files/delete-messy-rpm-files.sh | 21 ++ .../files/uninstall-messy-jdk-packages.sh | 23 ++ .../meta/.galaxy_install_info | 1 + .../williamyeh.oracle-java/meta/main.yml | 41 ++++ .../roles/williamyeh.oracle-java/prefetch.yml | 18 ++ .../williamyeh.oracle-java/tasks/fetch.yml | 26 +++ .../tasks/fetch_jce.yml | 8 + .../williamyeh.oracle-java/tasks/install.yml | 108 ++++++++++ .../tasks/install_jce.yml | 72 +++++++ .../williamyeh.oracle-java/tasks/main.yml | 42 ++++ .../tasks/set-role-variables.yml | 180 ++++++++++++++++ .../williamyeh.oracle-java/tasks/use-dmg.yml | 20 ++ .../williamyeh.oracle-java/tasks/use-rpm.yml | 44 ++++ .../tasks/use-tarball.yml | 23 ++ .../templates/java_home.sh.j2 | 4 + tests/roles/williamyeh.oracle-java/test.yml | 13 ++ .../test/Dockerfile-centos6 | 32 +++ .../test/Dockerfile-centos7 | 29 +++ .../test/Dockerfile-debian7 | 29 +++ .../test/Dockerfile-debian8 | 29 +++ .../test/Dockerfile-prefetch-rpm | 28 +++ .../test/Dockerfile-prefetch-tarball | 28 +++ .../test/Dockerfile-ubuntu12.04 | 29 +++ .../test/Dockerfile-ubuntu14.04 | 29 +++ .../test/travis/before_install.sh | 32 +++ .../test/travis/script.sh | 33 +++ 39 files changed, 1450 insertions(+), 9 deletions(-) create mode 100644 tests/roles/williamyeh.oracle-java/.gitignore create mode 100644 tests/roles/williamyeh.oracle-java/.travis.yml create mode 100644 tests/roles/williamyeh.oracle-java/LICENSE create mode 100644 tests/roles/williamyeh.oracle-java/README.md create mode 100644 tests/roles/williamyeh.oracle-java/Vagrantfile create mode 100644 tests/roles/williamyeh.oracle-java/circle.yml create mode 100644 tests/roles/williamyeh.oracle-java/defaults/main.yml create mode 100755 tests/roles/williamyeh.oracle-java/files/check-java-version.sh create mode 100755 tests/roles/williamyeh.oracle-java/files/delete-messy-rpm-files.sh create mode 100755 tests/roles/williamyeh.oracle-java/files/uninstall-messy-jdk-packages.sh create mode 100644 tests/roles/williamyeh.oracle-java/meta/.galaxy_install_info create mode 100644 tests/roles/williamyeh.oracle-java/meta/main.yml create mode 100644 tests/roles/williamyeh.oracle-java/prefetch.yml create mode 100644 tests/roles/williamyeh.oracle-java/tasks/fetch.yml create mode 100644 tests/roles/williamyeh.oracle-java/tasks/fetch_jce.yml create mode 100644 tests/roles/williamyeh.oracle-java/tasks/install.yml create mode 100644 tests/roles/williamyeh.oracle-java/tasks/install_jce.yml create mode 100644 tests/roles/williamyeh.oracle-java/tasks/main.yml create mode 100644 tests/roles/williamyeh.oracle-java/tasks/set-role-variables.yml create mode 100644 tests/roles/williamyeh.oracle-java/tasks/use-dmg.yml create mode 100644 tests/roles/williamyeh.oracle-java/tasks/use-rpm.yml create mode 100644 tests/roles/williamyeh.oracle-java/tasks/use-tarball.yml create mode 100644 tests/roles/williamyeh.oracle-java/templates/java_home.sh.j2 create mode 100644 tests/roles/williamyeh.oracle-java/test.yml create mode 100644 tests/roles/williamyeh.oracle-java/test/Dockerfile-centos6 create mode 100644 tests/roles/williamyeh.oracle-java/test/Dockerfile-centos7 create mode 100644 tests/roles/williamyeh.oracle-java/test/Dockerfile-debian7 create mode 100644 tests/roles/williamyeh.oracle-java/test/Dockerfile-debian8 create mode 100644 tests/roles/williamyeh.oracle-java/test/Dockerfile-prefetch-rpm create mode 100644 tests/roles/williamyeh.oracle-java/test/Dockerfile-prefetch-tarball create mode 100644 tests/roles/williamyeh.oracle-java/test/Dockerfile-ubuntu12.04 create mode 100644 tests/roles/williamyeh.oracle-java/test/Dockerfile-ubuntu14.04 create mode 100755 tests/roles/williamyeh.oracle-java/test/travis/before_install.sh create mode 100755 tests/roles/williamyeh.oracle-java/test/travis/script.sh diff --git a/.gitignore b/.gitignore index 51fc9ec..3434b07 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ secrets.yml ## Terraform ## *.tfvars # Compiled files -*.tfstate -*.tfstate.backup +*.tfstate* # Module directory .terraform/ diff --git a/README.md b/README.md index e2e5b01..8283763 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ See [`defaults/main.yml`](defaults/main.yml). * [`geerlingguy.jenkins`](https://galaxy.ansible.com/geerlingguy/jenkins/) * [`geerlingguy.repo-epel`](https://galaxy.ansible.com/geerlingguy/repo-epel/) +* [`williamyeh.oracle-java`](https://galaxy.ansible.com/williamyeh/oracle-java/) ### Usage diff --git a/defaults/main.yml b/defaults/main.yml index 8a633da..b440169 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,11 +1,4 @@ --- -# https://github.com/geerlingguy/ansible-role-java#role-variables -java_packages: - - java-1.8.0-openjdk - - -### Plugins ### - # For more information on each plugin, visit # # https://plugins.jenkins.io/ diff --git a/meta/main.yml b/meta/main.yml index 4de67db..59a020d 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -43,7 +43,12 @@ galaxy_info: - cd dependencies: + - role: williamyeh.oracle-java + java_remove_download: false - role: geerlingguy.jenkins + # use williamyeh.oracle-java instead + # https://github.com/geerlingguy/ansible-role-java/issues/42 + java_packages: [] # handle the plugins ourselves - see `jenkins_plugin` use in tasks jenkins_plugins: [] - role: geerlingguy.repo-epel diff --git a/tests/requirements.yml b/tests/requirements.yml index 62d12d2..647e1db 100644 --- a/tests/requirements.yml +++ b/tests/requirements.yml @@ -2,3 +2,4 @@ # should match what's in `dependencies` list of `../meta/main.yml` - src: geerlingguy.jenkins - src: geerlingguy.repo-epel +- src: williamyeh.oracle-java diff --git a/tests/roles/williamyeh.oracle-java/.gitignore b/tests/roles/williamyeh.oracle-java/.gitignore new file mode 100644 index 0000000..a058c8c --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/.gitignore @@ -0,0 +1,2 @@ +.vagrant +*.retry diff --git a/tests/roles/williamyeh.oracle-java/.travis.yml b/tests/roles/williamyeh.oracle-java/.travis.yml new file mode 100644 index 0000000..ef6641f --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/.travis.yml @@ -0,0 +1,17 @@ +sudo: true +os: + - linux + - osx + +services: + - docker + +before_install: + - test/travis/before_install.sh + +script: + - test/travis/script.sh + +notifications: + webhooks: https://galaxy.ansible.com/api/v1/notifications/ + diff --git a/tests/roles/williamyeh.oracle-java/LICENSE b/tests/roles/williamyeh.oracle-java/LICENSE new file mode 100644 index 0000000..44acbef --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/LICENSE @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2014-2016 William Yeh + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/tests/roles/williamyeh.oracle-java/README.md b/tests/roles/williamyeh.oracle-java/README.md new file mode 100644 index 0000000..3556250 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/README.md @@ -0,0 +1,158 @@ + +williamyeh.oracle-java for Ansible Galaxy +============ + +[![Build Status](https://travis-ci.org/William-Yeh/ansible-oracle-java.svg?branch=master)](https://travis-ci.org/William-Yeh/ansible-oracle-java) [![Circle CI](https://circleci.com/gh/William-Yeh/ansible-oracle-java.svg?style=shield)](https://circleci.com/gh/William-Yeh/ansible-oracle-java) + +## Summary + +Role name in Ansible Galaxy: **[williamyeh.oracle-java](https://galaxy.ansible.com/williamyeh/oracle-java/)** + +This Ansible role has the following features for Oracle JDK: + + - Install JDK 7 or 8 version. + - Install optional Java Cryptography Extensions (JCE) + - Install for CentOS, Debian/Ubuntu, SUSE, and Mac OS X families. + +If you prefer OpenJDK, try alternatives such as [geerlingguy.java](https://galaxy.ansible.com/geerlingguy/java/) or [smola.java](https://galaxy.ansible.com/smola/java/). + + +## Role Variables + +### Mandatory variables + +None. + +### Optional variables + + +User-configurable defaults: + +```yaml +# which version? +java_version: 8 + +# which subversion? +java_subversion: 112 + +# which directory to put the download file? +java_download_path: /tmp + +# rpm/tar.gz file location: +# - true: download from Oracle on-the-fly; +# - false: copy from `{{ playbook_dir }}/files` on the control machine. +java_download_from_oracle: true + +# remove temporary downloaded files? +java_remove_download: true + +# set $JAVA_HOME? +java_set_javahome: false + +# install JCE? +java_install_jce: false +``` + +For other configurable internals, read `tasks/set-role-variables.yml` file; for example, supported `java_version`/`java_subversion` combinations. + +If you want to install a Java release which is not supported out-of-the-box, you have to specify the corresponding Java build number in the variable `java_build` in addition to `java_version` and `java_subversion`, e.g. +```yaml +--- +- hosts: all + + roles: + - williamyeh.oracle-java + + vars: + java_version: 8 + java_subversion: 91 + java_build: 14 +``` + + +### Customized variables, if absolutely necessary + +If you have a pre-downloaded `jdk_tarball_file` whose filename cannot be inferred successfully by `tasks/set-role-variables.yml`, you may specify it explicitly: + +```yaml +# Specify the pre-fetch filename (without tailing .tar.gz or .rpm or .dmg); +# used in conjunction with `java_download_from_oracle: false`. + +jdk_tarball_file + +# For example, if you have a `files/jdk-7u79-linux-x64.tar.gz` locally, +# but the filename cannot be inferred successfully by `tasks/set-role-variables.yml`, +# you may specify the following variables in your playbook: +# +# java_version: 7 +# java_subversion: 79 +# java_download_from_oracle: false +# jdk_tarball_file: jdk-7u79-linux-x64 +# +``` + + +## Usage + + +### Step 1: add role + +Add role name `williamyeh.oracle-java` to your playbook file. + + +### Step 2: add variables + +Set vars in your playbook file. + +Simple example: + +```yaml +--- +# file: simple-playbook.yml + +- hosts: all + + roles: + - williamyeh.oracle-java + + vars: + java_version: 8 +``` + + +### (Optionally) pre-fetch .rpm and .tar.gz files + +For some reasons, you may want to pre-fetch .rpm and .tar.gz files *before the execution of this role*, instead of downloading from Oracle on-the-fly. + +To do this, put the file on the `{{ playbook_dir }}/files` directory in advance, and then set the `java_download_from_oracle` variable to `false`: + +```yaml +--- +# file: prefetch-playbook.yml + +- hosts: all + + roles: + - williamyeh.oracle-java + + vars: + java_version: 8 + java_download_from_oracle: false +``` + + + + + + +## Dependencies + + +## License + +Licensed under the Apache License V2.0. See the [LICENSE file](LICENSE) for details. + + +## History + +Rewritten from my pre-Galaxy version: [server-config-template](https://github.com/William-Yeh/server-config-template). diff --git a/tests/roles/williamyeh.oracle-java/Vagrantfile b/tests/roles/williamyeh.oracle-java/Vagrantfile new file mode 100644 index 0000000..4196073 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/Vagrantfile @@ -0,0 +1,37 @@ +Vagrant.configure(2) do |config| + + # main & default: normal OS series... + config.vm.define "main", primary: true do |node| + node.vm.box = "ubuntu/trusty64" + #node.vm.box = "ubuntu/precise64" + #node.vm.box = "debian/jessie64" + #node.vm.box = "debian/wheezy64" + #node.vm.box = "bento/centos-7.2" + #node.vm.box = "bento/centos-6.7" + + node.vm.provision "ansible" do |ansible| + ansible.playbook = "test.yml" + #ansible.playbook = "prefetch.yml" + ansible.sudo = true + #ansible.verbose = "vvv" + end + end + + + # docker: for auto build & testing (e.g., Travis CI) + config.vm.define "docker" do |node| + node.vm.box = "williamyeh/ubuntu-trusty64-docker" + + node.vm.provision "shell", inline: <<-SHELL + cd /vagrant + docker build -f test/Dockerfile-ubuntu14.04 -t java_trusty . + docker build -f test/Dockerfile-ubuntu12.04 -t java_precise . + docker build -f test/Dockerfile-debian8 -t java_jessie . + docker build -f test/Dockerfile-debian7 -t java_wheezy . + docker build -f test/Dockerfile-centos7 -t java_centos7 . + docker build -f test/Dockerfile-centos6 -t java_centos6 . + SHELL + end + +end + diff --git a/tests/roles/williamyeh.oracle-java/circle.yml b/tests/roles/williamyeh.oracle-java/circle.yml new file mode 100644 index 0000000..93fc3a2 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/circle.yml @@ -0,0 +1,44 @@ +machine: + services: + - docker + +dependencies: + override: + - docker info + - docker version + + - echo "==> Prefetching .rpm and .tar.gz to `{{ playbook_dir }}/files`..." + - docker build -f test/Dockerfile-prefetch-rpm -t java_prefetch_rpm . + - docker run -v $(pwd):/data java_prefetch_rpm + - docker build -f test/Dockerfile-prefetch-tarball -t java_prefetch_tarball . + - docker run -v $(pwd):/data java_prefetch_tarball + - sed -i -e 's/^\(java_download_from_oracle:\).*$/\1 false/' defaults/main.yml + + - echo "==> Building test cases..." + - docker build -f test/Dockerfile-ubuntu14.04 -t java_trusty . + - docker build -f test/Dockerfile-ubuntu12.04 -t java_precise . + - docker build -f test/Dockerfile-debian8 -t java_jessie . + - docker build -f test/Dockerfile-debian7 -t java_wheezy . + - docker build -f test/Dockerfile-centos7 -t java_centos7 . + - docker build -f test/Dockerfile-centos6 -t java_centos6 . + +test: + override: + - docker run -i java_trusty 2> result-ubuntu14.04 + - docker run -i java_precise 2> result-ubuntu12.04 + - docker run -i java_jessie 2> result-debian8 + - docker run -i java_wheezy 2> result-debian7 + - docker run -i java_centos7 2> result-centos7 + - docker run -i java_centos6 2> result-centos6 + + - echo "==> Validating the test results..." + - sh -c "[ -s result-ubuntu14.04 ]" + - sh -c "[ -s result-ubuntu12.04 ]" + - sh -c "[ -s result-debian8 ]" + - sh -c "[ -s result-debian7 ]" + - sh -c "[ -s result-centos7 ]" + - sh -c "[ -s result-centos6 ]" + + - echo "==> Saving artifacts to CircleCI for reference..." + - cp files/jdk-* $CIRCLE_ARTIFACTS + - cp files/*.zip $CIRCLE_ARTIFACTS diff --git a/tests/roles/williamyeh.oracle-java/defaults/main.yml b/tests/roles/williamyeh.oracle-java/defaults/main.yml new file mode 100644 index 0000000..c0da713 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/defaults/main.yml @@ -0,0 +1,21 @@ +--- + +# +# variables needed to be defined in user's playbook +# + + + +# +# user-configurable defaults +# + +java_version: 8 +java_subversion: 112 + +java_download_path: /tmp +java_download_from_oracle: true +java_remove_download: true +java_install_jce: false + +java_set_javahome: false diff --git a/tests/roles/williamyeh.oracle-java/files/check-java-version.sh b/tests/roles/williamyeh.oracle-java/files/check-java-version.sh new file mode 100755 index 0000000..2bd023b --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/files/check-java-version.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# simple script to query the existance of specific Oracle jdk executable, if installed. +# +# @return: JSON string : { "found": true/false, "not_found": true/false } +# + +PACKAGE="\"$1\"" + +line=$(java -version 2>&1 | grep $PACKAGE | grep -iv openjdk | wc -l) +#echo $line + + +if [[ $line =~ 0 ]]; then + echo '{ "found": false , "not_found": true }' + +else + echo '{ "found": true , "not_found": false }' + +fi diff --git a/tests/roles/williamyeh.oracle-java/files/delete-messy-rpm-files.sh b/tests/roles/williamyeh.oracle-java/files/delete-messy-rpm-files.sh new file mode 100755 index 0000000..096db1d --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/files/delete-messy-rpm-files.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# simple script to delete messy .rpm files generated by Oracle(Sun) JDK; +# esp. sun-javadb series. +# + + +path_prefix=$1 + +messy_files=( + 'sun-javadb-*.rpm' + '*-linux-amd64.rpm' +); + + +for item in "${messy_files[@]}" +do + echo $item + rm -f --interactive=never $path_prefix/$item +done + +exit 0 diff --git a/tests/roles/williamyeh.oracle-java/files/uninstall-messy-jdk-packages.sh b/tests/roles/williamyeh.oracle-java/files/uninstall-messy-jdk-packages.sh new file mode 100755 index 0000000..c49c5b9 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/files/uninstall-messy-jdk-packages.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# simple script to uninstall messy packages provided by Oracle(Sun) JDK; +# esp. sun-javadb series. +# + + +messy_packages=( + 'sun-javadb-core' + 'sun-javadb-client' + 'sun-javadb-docs' + 'sun-javadb-javadoc' + 'sun-javadb-demo' + 'sun-javadb-common' +); + + +for pkg in "${messy_packages[@]}" +do + echo $pkg + rpm -e $pkg +done + +exit 0 diff --git a/tests/roles/williamyeh.oracle-java/meta/.galaxy_install_info b/tests/roles/williamyeh.oracle-java/meta/.galaxy_install_info new file mode 100644 index 0000000..1a42f4d --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/meta/.galaxy_install_info @@ -0,0 +1 @@ +{install_date: 'Thu May 18 22:27:24 2017', version: 2.11.0} diff --git a/tests/roles/williamyeh.oracle-java/meta/main.yml b/tests/roles/williamyeh.oracle-java/meta/main.yml new file mode 100644 index 0000000..d3e2cdf --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/meta/main.yml @@ -0,0 +1,41 @@ +--- +# nginx/meta/main.yml + +galaxy_info: + author: williamyeh + description: Oracle JDK 7/8 for CentOS/Debian/Ubuntu/Suse/MacOSX + license: Apache + + min_ansible_version: 2.0.0 + + platforms: + - name: Ubuntu + versions: + - precise + - trusty + - name: Debian + versions: + - wheezy + - jessie + - name: EL + versions: + - 6 + - 7 + - name: opensuse + versions: + - all + - name: SLES + versions: + - all + - name: Darwin + versions: + - all + + galaxy_tags: + - development + - system + - java + - jdk + - jvm + +dependencies: [] diff --git a/tests/roles/williamyeh.oracle-java/prefetch.yml b/tests/roles/williamyeh.oracle-java/prefetch.yml new file mode 100644 index 0000000..676633f --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/prefetch.yml @@ -0,0 +1,18 @@ +- hosts: all + become: yes + become_method: sudo + tasks: + - include: tasks/set-role-variables.yml + - name: fetch .rpm or .tar.gz files from Oracle site + include: tasks/fetch.yml + - name: fetch JCE files from Oracle site + include: tasks/fetch_jce.yml + + #vars_files: + # - 'defaults/main.yml' + + vars: + - java_version: 8 + - java_subversion: 112 + - java_download_path: /tmp + - java_install_jce: true diff --git a/tests/roles/williamyeh.oracle-java/tasks/fetch.yml b/tests/roles/williamyeh.oracle-java/tasks/fetch.yml new file mode 100644 index 0000000..dc34c43 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/tasks/fetch.yml @@ -0,0 +1,26 @@ +# +# fetch .rpm or .tar.gz files +# + +- name: get JDK tarball (as RPM file) + get_url: + url: "{{ jdk_tarball_url }}.rpm" + headers: 'Cookie:oraclelicense=accept-securebackup-cookie' + dest: "{{ java_download_path }}/{{ jdk_tarball_file }}.rpm" + when: (ansible_pkg_mgr == "yum" or ansible_pkg_mgr == "zypper") and ansible_os_family != 'Darwin' + + +- name: get JDK tarball (as tar.gz file) + get_url: + url: "{{ jdk_tarball_url }}.tar.gz" + headers: 'Cookie:oraclelicense=accept-securebackup-cookie' + dest: "{{ java_download_path }}/{{ jdk_tarball_file }}.tar.gz" + when: ansible_pkg_mgr != "yum" and ansible_pkg_mgr != "zypper" and ansible_os_family != 'Darwin' + +- name: get JDK package (as Mac OS X .dmg) + get_url: + url: "{{ jdk_tarball_url }}.dmg" + headers: 'Cookie:oraclelicense=accept-securebackup-cookie' + dest: "{{ java_download_path }}/{{ jdk_tarball_file }}.dmg" + when: ansible_os_family == 'Darwin' + diff --git a/tests/roles/williamyeh.oracle-java/tasks/fetch_jce.yml b/tests/roles/williamyeh.oracle-java/tasks/fetch_jce.yml new file mode 100644 index 0000000..c167c69 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/tasks/fetch_jce.yml @@ -0,0 +1,8 @@ +--- +# Script for fetching Java Cryptography Extensions (JCE) + +- name: get JCE + get_url: + url: "{{ jce_zip_url }}" + headers: 'Cookie:oraclelicense=accept-securebackup-cookie' + dest: "{{ java_download_path }}/{{ jce_zip_file }}" diff --git a/tests/roles/williamyeh.oracle-java/tasks/install.yml b/tests/roles/williamyeh.oracle-java/tasks/install.yml new file mode 100644 index 0000000..cfd0e40 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/tasks/install.yml @@ -0,0 +1,108 @@ +--- +# file: tasks/install.yml +# Top-level installer for Oracle JDK. +# + + +- name: fetch .rpm or .tar.gz files from Oracle site + include: fetch.yml + when: java_download_from_oracle + +- block: + + - name: copy RPM from local + copy: + src: "{{ playbook_dir }}/files/{{ jdk_tarball_file }}.rpm" + dest: "{{ java_download_path }}/{{ jdk_tarball_file }}.rpm" + when: ansible_pkg_mgr == "yum" or ansible_pkg_mgr == "zypper" + + - name: copy tarball from local + copy: + src: "{{ playbook_dir }}/files/{{ jdk_tarball_file }}.tar.gz" + dest: "{{ java_download_path }}/{{ jdk_tarball_file }}.tar.gz" + when: ansible_pkg_mgr != "yum" and ansible_pkg_mgr != "zypper" + + when: not java_download_from_oracle + + + +- name: delegate to RPM installation process + include: use-rpm.yml + when: (ansible_pkg_mgr == "yum" or ansible_pkg_mgr == "zypper") and ansible_os_family != 'Darwin' + +- name: delegate to raw tarball installation process + include: use-tarball.yml + when: ansible_pkg_mgr != "yum" and ansible_pkg_mgr != "zypper" and ansible_os_family != 'Darwin' + +- name: delegate to Mac OS X dmg installation + include: use-dmg.yml + when: ansible_os_family == 'Darwin' + +- block: + + - name: make sure /etc/profile.d exists + file: path=/etc/profile.d state=directory + + - name: export JAVA_HOME + template: + src: ../templates/java_home.sh.j2 + dest: /etc/profile.d/java_home.sh + mode: "a+x" + + when: java_set_javahome + + + +- block: + + # No link creation is necessary on Mac OS X -- + # the package installer automatically creates symlinks in /usr/bin. + + - name: 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 + + - name: alternatives link for "java" + alternatives: + name: java + link: /usr/bin/java + path: "{{ java_install_dir }}/{{ java_default_link_name }}/bin/java" + + - name: alternatives link for "javac" + alternatives: + name: javac + link: /usr/bin/javac + path: "{{ java_install_dir }}/{{ java_default_link_name }}/bin/javac" + + - name: alternatives link for "jar" + alternatives: + name: jar + link: /usr/bin/jar + path: "{{ java_install_dir }}/{{ java_default_link_name }}/bin/jar" + + - name: check if "java_sdk" target exists + stat: path=/usr/lib/jvm/java + register: filecheck + + - name: alternatives link for "java_sdk" + alternatives: + name: java_sdk + link: /usr/lib/jvm/java + path: "{{ java_install_dir }}/{{ java_default_link_name }}" + when: filecheck and filecheck.stat.exists + + when: ansible_os_family != "Darwin" + + + +- name: remove temporary downloaded files, if requested + file: path={{ item }} state=absent + with_items: + - "{{ java_download_path }}/{{ jdk_tarball_file }}.rpm" + - "{{ java_download_path }}/{{ jdk_tarball_file }}.tar.gz" + - "{{ java_download_path }}/{{ jdk_tarball_file }}.dmg" + - "{{ java_download_path }}/check-tarball-installed.sh" + ignore_errors: true + when: java_remove_download diff --git a/tests/roles/williamyeh.oracle-java/tasks/install_jce.yml b/tests/roles/williamyeh.oracle-java/tasks/install_jce.yml new file mode 100644 index 0000000..af602c8 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/tasks/install_jce.yml @@ -0,0 +1,72 @@ +--- +# Installation script for Java Cryptography Extensions (JCE) + +- block: + - name: Find Java Home in Mac + shell: /usr/libexec/java_home + register: java_home_cmd + changed_when: false + - name: Set java_home + set_fact: java_home={{ java_home_cmd.stdout }} + when: java_home_cmd.skipped is not defined and java_home is not defined + when: ansible_os_family == "Darwin" + +- block: + - name: Make sure 'which' is installed + package: name=which state=present + when: ansible_os_family == "RedHat" + - name: Find Java Home in Linux + shell: dirname $(dirname $(readlink -e $(which java))) + register: java_home_cmd + changed_when: false + - name: Set java_home + set_fact: java_home={{ java_home_cmd.stdout }} + when: java_home_cmd.skipped is not defined and java_home is not defined + when: ansible_os_family != "Darwin" + +- name: Check if JCE is already installed + shell: "{{ java_home }}/bin/jrunscript -e 'print (javax.crypto.Cipher.getMaxAllowedKeyLength(\"RC5\") >= 256);'" + changed_when: false + ignore_errors: true + register: jce_check + +- block: + - include: fetch_jce.yml + when: java_download_from_oracle + + - name: copy JCE zip from local + copy: + src: "{{ playbook_dir }}/files/{{ jce_zip_file }}" + dest: "{{ java_download_path }}/{{ jce_zip_file }}" + when: not java_download_from_oracle + + - name: install unzip + package: name=unzip state=present + when: ansible_os_family != "Darwin" + + - name: unzip JCE + unarchive: + src: "{{ java_download_path }}/{{ jce_zip_file }}" + dest: "{{ java_download_path }}/" + copy: no + creates: "{{ java_download_path }}/{{ jce_zip_folder }}" + + - name: install JCE policies + copy: + src: "{{ java_download_path }}/{{ jce_zip_folder }}/{{ item }}" + dest: "{{ java_home }}/jre/lib/security/{{ item }}" + remote_src: True + mode: 0664 + become: true + with_items: + - local_policy.jar + - US_export_policy.jar + + - name: remove temporary downloaded JCE files, if requested + file: path={{ item }} state=absent + with_items: + - "{{ java_download_path }}/{{ jce_zip_file }}" + - "{{ java_download_path }}/{{ jce_zip_folder }}" + ignore_errors: true + when: java_remove_download + when: jce_check.stdout == "false" diff --git a/tests/roles/williamyeh.oracle-java/tasks/main.yml b/tests/roles/williamyeh.oracle-java/tasks/main.yml new file mode 100644 index 0000000..ce16757 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/tasks/main.yml @@ -0,0 +1,42 @@ +--- +# file: tasks/main.yml +# Top-level installer for Oracle JDK. +# + +- name: precondition - java_version + fail: msg="ERROR - required variable 'java_version' missing." + when: java_version is not defined + +- name: precondition - java_subversion + fail: msg="ERROR - required variable 'java_subversion' missing." + when: java_subversion is not defined + +- name: precondition - java_install_jce + fail: msg="ERROR - required variable 'java_install_jce' missing." + when: java_install_jce is not defined + +- include: set-role-variables.yml + + + +- name: install libselinux-python binary for Ansible to work + yum: name=libselinux-python state=present + when: ansible_pkg_mgr == "yum" + +- name: copy scripts to server + copy: src="../files/check-java-version.sh" dest="{{ java_download_path }}/" mode="a+x" + +- name: check if specific version of Oracle JDK is 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 + +#- debug: var=jdk_info + +- include: install.yml + when: (jdk_info.stdout|from_json).not_found + +- name: delegate to JCE zip installation process + include: install_jce.yml + when: java_install_jce diff --git a/tests/roles/williamyeh.oracle-java/tasks/set-role-variables.yml b/tests/roles/williamyeh.oracle-java/tasks/set-role-variables.yml new file mode 100644 index 0000000..9105e02 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/tasks/set-role-variables.yml @@ -0,0 +1,180 @@ +--- +# file: tasks/set-role-variables.yml +# set necessary role variables. +# + + +- name: set general internal vars + set_fact: + jdk_version: "1.{{ java_version }}.0_{{ java_subversion }}" + + +# +# platform-specific variables +# + +- name: set java architecture + set_fact: + jdk_arch: "{{ 'i586' if ansible_architecture == 'i386' else 'x64' }}" + +- name: set java OS for Linux + set_fact: + jdk_os: linux + when: ansible_system == 'Linux' + +- name: set java OS for Mac OS X + set_fact: + jdk_os: macosx + when: ansible_os_family == 'Darwin' + + +# +# version-specific variables +# +- name: set internal vars for 1.8.0_112 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b15" + when: java_version == 8 and java_subversion == 112 + +- name: set internal vars for 1.8.0_111 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b14" + when: java_version == 8 and java_subversion == 111 + +- name: set internal vars for 1.8.0_102 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b14" + when: java_version == 8 and java_subversion == 102 + +- name: set internal vars for 1.8.0_101 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b13" + when: java_version == 8 and java_subversion == 101 + +- name: set internal vars for 1.8.0_92 or 1.8.0_91 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b14" + when: java_version == 8 and (java_subversion == 92 or java_subversion == 91) + +- name: set internal vars for 1.8.0_77 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b03" + when: java_version == 8 and java_subversion == 77 + +- name: set internal vars for 1.8.0_74 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b02" + when: java_version == 8 and java_subversion == 74 + +- name: set internal vars for 1.8.0_73 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b02" + when: java_version == 8 and java_subversion == 73 + +- name: set internal vars for 1.8.0_72 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b15" + when: java_version == 8 and java_subversion == 72 + +- name: set internal vars for 1.8.0_66 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b17" + when: java_version == 8 and java_subversion == 66 + +- name: set internal vars for 1.8.0_65 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b17" + when: java_version == 8 and java_subversion == 65 + +- name: set internal vars for 1.8.0_60 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b27" + when: java_version == 8 and java_subversion == 60 + +- name: set internal vars for 1.8.0_51 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b16" + when: java_version == 8 and java_subversion == 51 + +- name: set internal vars for 1.8.0_45 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b14" + when: java_version == 8 and java_subversion == 45 + +- name: set internal vars for 1.8.0_31 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b13" + when: java_version == 8 and java_subversion == 31 + +- name: set internal vars for 1.7.0_80 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b15" + when: java_version == 7 and java_subversion == 80 + +- name: set internal vars for 1.7.0_75 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b13" + when: java_version == 7 and java_subversion == 75 + +- name: set internal vars for generic Java version + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b{{ java_build }}" + when: jdk_version_detail is not defined and java_build is defined + + +- name: compose filename, if necessary + set_fact: + jdk_tarball_file: "jdk-{{ java_version }}u{{ java_subversion }}-{{ jdk_os }}-{{ jdk_arch }}" + when: jdk_tarball_file is not defined + +- name: compose url for downloading file, if necessary + set_fact: + jdk_tarball_url: "http://download.oracle.com/otn-pub/java/jdk/{{ jdk_version_detail }}/{{ jdk_tarball_file }}" + when: jdk_version_detail is defined + + +# +# JCE variables +# + +- name: set JCE variables for java 7 + set_fact: + jce_zip_file: "UnlimitedJCEPolicyJDK{{ java_version }}.zip" + jce_zip_folder: "UnlimitedJCEPolicy" + when: java_version == 7 + +- name: set JCE variables for java 8 + set_fact: + jce_zip_file: "jce_policy-{{ java_version }}.zip" + jce_zip_folder: "UnlimitedJCEPolicyJDK{{ java_version }}" + when: java_version == 8 + +- name: set JCE download file + set_fact: + jce_zip_url: "http://download.oracle.com/otn-pub/java/jce/{{ java_version }}/{{ jce_zip_file }}" + + +# +# directories +# + +- name: set java installation directory on Debian platforms + set_fact: + java_install_dir: /usr/lib/jvm + java_default_link_name: default-java + java_home: /usr/lib/jvm/default-java + when: ansible_os_family == "Debian" + +- name: set java installation directory on Mac OS X + set_fact: + # The Java installation directory on Mac OS X is determined by the package itself. + java_install_dir: /no_such_directory + java_default_link_name: default + when: ansible_os_family == "Darwin" + +- name: set java installation directory on non-Debian platforms + set_fact: + java_install_dir: /usr/java + java_default_link_name: default + java_home: /usr/java/default + when: ansible_os_family != "Debian" and ansible_os_family != "Darwin" diff --git a/tests/roles/williamyeh.oracle-java/tasks/use-dmg.yml b/tests/roles/williamyeh.oracle-java/tasks/use-dmg.yml new file mode 100644 index 0000000..3525006 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/tasks/use-dmg.yml @@ -0,0 +1,20 @@ +--- +# file: use-tarball.yml +# install Oracle JDK 1.x on Mac OS X +# +# See: # https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html +# + +- name: mount the downloaded dmg + shell: hdiutil attach "{{ java_download_path }}/{{ jdk_tarball_file }}.dmg" + +- name: install the pkg file from the dmg + become: yes + become_method: sudo + shell: > + installer + -pkg "/Volumes/JDK {{ java_version }} Update {{ java_subversion }}/JDK {{ java_version }} Update {{ java_subversion }}.pkg" + -target / + +- name: unmount the downloaded dmg + shell: hdiutil detach "/Volumes/JDK {{ java_version }} Update {{ java_subversion }}" diff --git a/tests/roles/williamyeh.oracle-java/tasks/use-rpm.yml b/tests/roles/williamyeh.oracle-java/tasks/use-rpm.yml new file mode 100644 index 0000000..e825394 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/tasks/use-rpm.yml @@ -0,0 +1,44 @@ +--- +# file: tasks/use-rpm.yml +# install Oracle JDK 1.x on CentOS +# +# Adapted from: http://blog.trifork.com/2013/04/02/ansible-example-playbook-to-setup-jenkins-slave/ +# See also: http://java.dzone.com/articles/installing-oracle-java6-ubuntu +# + +- name: uninstall messy packages to avoid blocking conditions + script: ../files/uninstall-messy-jdk-packages.sh + +- name: delete messy .rpm files to avoid blocking conditions + script: ../files/delete-messy-rpm-files.sh {{ java_download_path }} + + +- name: install JDK via RPM file with yum + yum: + name: "{{ java_download_path }}/{{ jdk_tarball_file }}.rpm" + state: present + when: ansible_pkg_mgr == "yum" + +# Cannot use zypper module: https://github.com/ansible/ansible-modules-extras/issues/2094 +# Following https://en.opensuse.org/SDB:Installing_Java +- block: + - name: symlink /usr/sbin/update-alternatives to /usr/sbin/alternatives + file: src=/usr/sbin/update-alternatives dest=/usr/sbin/alternatives state=link + + - name: check if pkg already installed + shell: rpm -ql $(rpm -qp "{{ java_download_path }}/{{ jdk_tarball_file }}.rpm") + register: reg_validate + failed_when: reg_validate.rc != 0 and reg_validate.rc != 1 + + - name: install JDK via RPM file with rpm (for zypper) + shell: rpm -ivh --nodeps "{{ java_download_path }}/{{ jdk_tarball_file }}.rpm" + when: reg_validate.rc != 0 + #shell: zypper --no-gpg-checks --non-interactive install "{{ java_download_path }}/{{ jdk_tarball_file }}.rpm" + when: ansible_pkg_mgr == "zypper" + + +- name: clean up - uninstall messy packages + script: ../files/uninstall-messy-jdk-packages.sh + +- name: clean up - delete messy .rpm files + script: ../files/delete-messy-rpm-files.sh {{ java_download_path }} diff --git a/tests/roles/williamyeh.oracle-java/tasks/use-tarball.yml b/tests/roles/williamyeh.oracle-java/tasks/use-tarball.yml new file mode 100644 index 0000000..38b593e --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/tasks/use-tarball.yml @@ -0,0 +1,23 @@ +--- +# file: use-tarball.yml +# install Oracle JDK 1.x on distributions other than the CentOS/RHEL family +# +# See: https://docs.oracle.com/javase/8/docs/technotes/guides/install/linux_jdk.html +# + +- name: mkdir for Java + file: + path: "{{ java_install_dir }}/jdk{{ jdk_version }}" + state: directory + owner: root + group: root + mode: "u=rwx,go=rx" + +- name: install JDK via tarball file + unarchive: + src: "{{ java_download_path }}/{{ jdk_tarball_file }}.tar.gz" + dest: "{{ java_install_dir }}" + owner: root + group: root + mode: "go-w" + copy: no diff --git a/tests/roles/williamyeh.oracle-java/templates/java_home.sh.j2 b/tests/roles/williamyeh.oracle-java/templates/java_home.sh.j2 new file mode 100644 index 0000000..2d5c4ce --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/templates/java_home.sh.j2 @@ -0,0 +1,4 @@ +#!/bin/sh + +export JAVA_HOME={{ java_install_dir }}/{{ java_default_link_name }} + diff --git a/tests/roles/williamyeh.oracle-java/test.yml b/tests/roles/williamyeh.oracle-java/test.yml new file mode 100644 index 0000000..e512797 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test.yml @@ -0,0 +1,13 @@ +--- +- hosts: "{{ test_hosts|default('all') }}" + become: yes + become_method: sudo + tasks: + - include: 'tasks/main.yml' + vars_files: + - 'defaults/main.yml' + + vars: + #java_version: 8 + java_subversion: 112 + java_install_jce: true diff --git a/tests/roles/williamyeh.oracle-java/test/Dockerfile-centos6 b/tests/roles/williamyeh.oracle-java/test/Dockerfile-centos6 new file mode 100644 index 0000000..ef66358 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/Dockerfile-centos6 @@ -0,0 +1,32 @@ +# Dockerfile for building image that contains software stack provisioned by Ansible. +# +# Version 1.1 +# + + +# pull base image +FROM williamyeh/ansible:centos6-onbuild + +MAINTAINER William Yeh + + +# +# build phase +# + +RUN echo "===> Installing the missing "tar" utility for Docker image..." && \ + yum -y install tar + +RUN echo "===> Patching defaults/main.yml to enable java_install_jce..." && \ + sed -i -e 's/^java_install_jce:.*/java_install_jce: true/g' defaults/main.yml + +ENV PLAYBOOK test.yml +RUN ansible-playbook-wrapper -vvv + + + +# +# test phase +# + +CMD ["java", "-version"] diff --git a/tests/roles/williamyeh.oracle-java/test/Dockerfile-centos7 b/tests/roles/williamyeh.oracle-java/test/Dockerfile-centos7 new file mode 100644 index 0000000..2d67838 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/Dockerfile-centos7 @@ -0,0 +1,29 @@ +# Dockerfile for building image that contains software stack provisioned by Ansible. +# +# Version 1.1 +# + + +# pull base image +FROM williamyeh/ansible:centos7-onbuild + +MAINTAINER William Yeh + + +# +# build phase +# + +RUN echo "===> Patching defaults/main.yml to enable java_install_jce..." && \ + sed -i -e 's/^java_install_jce:.*/java_install_jce: true/g' defaults/main.yml + +ENV PLAYBOOK test.yml +RUN ansible-playbook-wrapper + + + +# +# test phase +# + +CMD ["java", "-version"] diff --git a/tests/roles/williamyeh.oracle-java/test/Dockerfile-debian7 b/tests/roles/williamyeh.oracle-java/test/Dockerfile-debian7 new file mode 100644 index 0000000..e66db94 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/Dockerfile-debian7 @@ -0,0 +1,29 @@ +# Dockerfile for building image that contains software stack provisioned by Ansible. +# +# Version 1.1 +# + + +# pull base image +FROM williamyeh/ansible:debian7-onbuild + +MAINTAINER William Yeh + + +# +# build phase +# + +RUN echo "===> Patching defaults/main.yml to enable java_install_jce..." && \ + sed -i -e 's/^java_install_jce:.*/java_install_jce: true/g' defaults/main.yml + +ENV PLAYBOOK test.yml +RUN ansible-playbook-wrapper + + + +# +# test phase +# + +CMD ["java", "-version"] diff --git a/tests/roles/williamyeh.oracle-java/test/Dockerfile-debian8 b/tests/roles/williamyeh.oracle-java/test/Dockerfile-debian8 new file mode 100644 index 0000000..fb64139 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/Dockerfile-debian8 @@ -0,0 +1,29 @@ +# Dockerfile for building image that contains software stack provisioned by Ansible. +# +# Version 1.1 +# + + +# pull base image +FROM williamyeh/ansible:debian8-onbuild + +MAINTAINER William Yeh + + +# +# build phase +# + +RUN echo "===> Patching defaults/main.yml to enable java_install_jce..." && \ + sed -i -e 's/^java_install_jce:.*/java_install_jce: true/g' defaults/main.yml + +ENV PLAYBOOK test.yml +RUN ansible-playbook-wrapper + + + +# +# test phase +# + +CMD ["java", "-version"] diff --git a/tests/roles/williamyeh.oracle-java/test/Dockerfile-prefetch-rpm b/tests/roles/williamyeh.oracle-java/test/Dockerfile-prefetch-rpm new file mode 100644 index 0000000..590564f --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/Dockerfile-prefetch-rpm @@ -0,0 +1,28 @@ +# Dockerfile for building image that contains software stack provisioned by Ansible. +# +# Version 1.1 +# + + +# pull base image +FROM williamyeh/ansible:centos7-onbuild + +MAINTAINER William Yeh + + +# +# build phase +# + +ENV PLAYBOOK prefetch.yml +RUN ansible-playbook-wrapper + + + +# +# output phase +# + +VOLUME [ "/data" ] +CMD cp /tmp/jdk-*.rpm /data/files && \ + cp /tmp/*.zip /data/files diff --git a/tests/roles/williamyeh.oracle-java/test/Dockerfile-prefetch-tarball b/tests/roles/williamyeh.oracle-java/test/Dockerfile-prefetch-tarball new file mode 100644 index 0000000..121d482 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/Dockerfile-prefetch-tarball @@ -0,0 +1,28 @@ +# Dockerfile for building image that contains software stack provisioned by Ansible. +# +# Version 1.1 +# + + +# pull base image +FROM williamyeh/ansible:debian8-onbuild + +MAINTAINER William Yeh + + +# +# build phase +# + +ENV PLAYBOOK prefetch.yml +RUN ansible-playbook-wrapper + + + +# +# output phase +# + +VOLUME [ "/data" ] +CMD cp /tmp/jdk-*.tar.gz /data/files && \ + cp /tmp/*.zip /data/files diff --git a/tests/roles/williamyeh.oracle-java/test/Dockerfile-ubuntu12.04 b/tests/roles/williamyeh.oracle-java/test/Dockerfile-ubuntu12.04 new file mode 100644 index 0000000..6c460cf --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/Dockerfile-ubuntu12.04 @@ -0,0 +1,29 @@ +# Dockerfile for building image that contains software stack provisioned by Ansible. +# +# Version 1.1 +# + + +# pull base image +FROM williamyeh/ansible:ubuntu12.04-onbuild + +MAINTAINER William Yeh + + +# +# build phase +# + +RUN echo "===> Patching defaults/main.yml to enable java_install_jce..." && \ + sed -i -e 's/^java_install_jce:.*/java_install_jce: true/g' defaults/main.yml + +ENV PLAYBOOK test.yml +RUN ansible-playbook-wrapper + + + +# +# test phase +# + +CMD ["java", "-version"] diff --git a/tests/roles/williamyeh.oracle-java/test/Dockerfile-ubuntu14.04 b/tests/roles/williamyeh.oracle-java/test/Dockerfile-ubuntu14.04 new file mode 100644 index 0000000..322fcc5 --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/Dockerfile-ubuntu14.04 @@ -0,0 +1,29 @@ +# Dockerfile for building image that contains software stack provisioned by Ansible. +# +# Version 1.1 +# + + +# pull base image +FROM williamyeh/ansible:ubuntu14.04-onbuild + +MAINTAINER William Yeh + + +# +# build phase +# + +RUN echo "===> Patching defaults/main.yml to enable java_install_jce..." && \ + sed -i -e 's/^java_install_jce:.*/java_install_jce: true/g' defaults/main.yml + +ENV PLAYBOOK test.yml +RUN ansible-playbook-wrapper + + + +# +# test phase +# + +CMD ["java", "-version"] diff --git a/tests/roles/williamyeh.oracle-java/test/travis/before_install.sh b/tests/roles/williamyeh.oracle-java/test/travis/before_install.sh new file mode 100755 index 0000000..63512aa --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/travis/before_install.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +set -uo pipefail + +case "$TRAVIS_OS_NAME" in + linux) + docker info + docker version + + echo "==> Prefetching .rpm and .tar.gz to '$PWD/files'..." + docker build -f test/Dockerfile-prefetch-rpm -t java_prefetch_rpm . + docker run -v $(pwd):/data java_prefetch_rpm + docker build -f test/Dockerfile-prefetch-tarball -t java_prefetch_tarball . + docker run -v $(pwd):/data java_prefetch_tarball + sed -i -e 's/^\(java_download_from_oracle:\).*$/\1 false/' defaults/main.yml + + echo "==> Building test cases..." + docker build -f test/Dockerfile-ubuntu14.04 -t java_trusty . + docker build -f test/Dockerfile-ubuntu12.04 -t java_precise . + docker build -f test/Dockerfile-debian8 -t java_jessie . + docker build -f test/Dockerfile-debian7 -t java_wheezy . + docker build -f test/Dockerfile-centos7 -t java_centos7 . + docker build -f test/Dockerfile-centos6 -t java_centos6 . + ;; + osx) + echo "==> Installing Ansible using pip on Mac OS X" + sudo pip install ansible + ;; + *) + echo "Unknown value of TRAVIS_OS_NAME: '$TRAVIS_OS_NAME'" >&2 + exit 1 +esac diff --git a/tests/roles/williamyeh.oracle-java/test/travis/script.sh b/tests/roles/williamyeh.oracle-java/test/travis/script.sh new file mode 100755 index 0000000..0930ffb --- /dev/null +++ b/tests/roles/williamyeh.oracle-java/test/travis/script.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -uo pipefail + +case "$TRAVIS_OS_NAME" in + linux) + docker run -i java_trusty 2> result-ubuntu14.04 + docker run -i java_precise 2> result-ubuntu12.04 + docker run -i java_jessie 2> result-debian8 + docker run -i java_wheezy 2> result-debian7 + docker run -i java_centos7 2> result-centos7 + docker run -i java_centos6 2> result-centos6 + + echo "==> Validating the test results..." + sh -c "[ -s result-ubuntu14.04 ]" + sh -c "[ -s result-ubuntu12.04 ]" + sh -c "[ -s result-debian8 ]" + sh -c "[ -s result-debian7 ]" + sh -c "[ -s result-centos7 ]" + sh -c "[ -s result-centos6 ]" + ;; + osx) + echo "==> Running tests using ansible-playbook on Mac OS X..." + ansible-playbook test.yml --extra-vars test_hosts=localhost + + echo "==> Validating the test results..." + java -version 2> result-macosx + sh -c "[ -s result-macosx ]" + ;; + *) + echo "Unknown value of TRAVIS_OS_NAME: '$TRAVIS_OS_NAME'" >&2 + exit 1 +esac From 18d1fdcac11a29716bc6ee4e693a4ffd2eb02529 Mon Sep 17 00:00:00 2001 From: Aidan Feldman Date: Tue, 30 May 2017 00:46:30 -0400 Subject: [PATCH 2/2] fix Java installation Switch to using fork, as workaround to JDK download URL change. --- README.md | 1 + meta/main.yml | 9 ++++++--- tests/requirements.yml | 5 ++++- .../roles/williamyeh.oracle-java/defaults/main.yml | 2 +- .../meta/.galaxy_install_info | 2 +- .../tasks/set-role-variables.yml | 13 ++++++++++++- 6 files changed, 25 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 8283763..08390e2 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ See [`defaults/main.yml`](defaults/main.yml). * [`geerlingguy.jenkins`](https://galaxy.ansible.com/geerlingguy/jenkins/) * [`geerlingguy.repo-epel`](https://galaxy.ansible.com/geerlingguy/repo-epel/) * [`williamyeh.oracle-java`](https://galaxy.ansible.com/williamyeh/oracle-java/) + * Using [a fork](https://github.com/gjedeer/ansible-oracle-java), due to [this issue](https://github.com/William-Yeh/ansible-oracle-java/issues/58) ### Usage diff --git a/meta/main.yml b/meta/main.yml index 59a020d..b1e2ac4 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -43,12 +43,15 @@ galaxy_info: - cd dependencies: - - role: williamyeh.oracle-java + - name: williamyeh.oracle-java + # https://github.com/William-Yeh/ansible-oracle-java/pull/60 + src: https://github.com/gjedeer/ansible-oracle-java + version: "0463628" java_remove_download: false - - role: geerlingguy.jenkins + - src: geerlingguy.jenkins # use williamyeh.oracle-java instead # https://github.com/geerlingguy/ansible-role-java/issues/42 java_packages: [] # handle the plugins ourselves - see `jenkins_plugin` use in tasks jenkins_plugins: [] - - role: geerlingguy.repo-epel + - src: geerlingguy.repo-epel diff --git a/tests/requirements.yml b/tests/requirements.yml index 647e1db..af4db02 100644 --- a/tests/requirements.yml +++ b/tests/requirements.yml @@ -2,4 +2,7 @@ # should match what's in `dependencies` list of `../meta/main.yml` - src: geerlingguy.jenkins - src: geerlingguy.repo-epel -- src: williamyeh.oracle-java +- name: williamyeh.oracle-java + # https://github.com/William-Yeh/ansible-oracle-java/pull/60 + src: https://github.com/gjedeer/ansible-oracle-java + version: "0463628" diff --git a/tests/roles/williamyeh.oracle-java/defaults/main.yml b/tests/roles/williamyeh.oracle-java/defaults/main.yml index c0da713..f599f4d 100644 --- a/tests/roles/williamyeh.oracle-java/defaults/main.yml +++ b/tests/roles/williamyeh.oracle-java/defaults/main.yml @@ -11,7 +11,7 @@ # java_version: 8 -java_subversion: 112 +java_subversion: 131 java_download_path: /tmp java_download_from_oracle: true diff --git a/tests/roles/williamyeh.oracle-java/meta/.galaxy_install_info b/tests/roles/williamyeh.oracle-java/meta/.galaxy_install_info index 1a42f4d..6c0ee03 100644 --- a/tests/roles/williamyeh.oracle-java/meta/.galaxy_install_info +++ b/tests/roles/williamyeh.oracle-java/meta/.galaxy_install_info @@ -1 +1 @@ -{install_date: 'Thu May 18 22:27:24 2017', version: 2.11.0} +{install_date: 'Tue May 30 04:32:25 2017', version: 0463628} diff --git a/tests/roles/williamyeh.oracle-java/tasks/set-role-variables.yml b/tests/roles/williamyeh.oracle-java/tasks/set-role-variables.yml index 9105e02..0e3a1d5 100644 --- a/tests/roles/williamyeh.oracle-java/tasks/set-role-variables.yml +++ b/tests/roles/williamyeh.oracle-java/tasks/set-role-variables.yml @@ -31,6 +31,12 @@ # # version-specific variables # +- name: set internal vars for 1.8.0_131 + set_fact: + jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b11" + jdk_tarball_hash: d54c1d3a095b4ff2b6607d096fa80163 + when: java_version == 8 and java_subversion == 131 + - name: set internal vars for 1.8.0_112 set_fact: jdk_version_detail: "{{ java_version }}u{{ java_subversion }}-b15" @@ -130,8 +136,13 @@ - name: compose url for downloading file, if necessary set_fact: jdk_tarball_url: "http://download.oracle.com/otn-pub/java/jdk/{{ jdk_version_detail }}/{{ jdk_tarball_file }}" - when: jdk_version_detail is defined + when: jdk_version_detail is defined and jdk_tarball_hash is not defined + +- name: compose url for downloading file, if necessary + set_fact: + jdk_tarball_url: "http://download.oracle.com/otn-pub/java/jdk/{{ jdk_version_detail }}/{{ jdk_tarball_hash }}/{{ jdk_tarball_file }}" + when: jdk_version_detail is defined and jdk_tarball_hash is defined # # JCE variables