├── .travis.yml ├── LICENSE ├── README.md ├── defaults └── main.yml ├── meta └── main.yml ├── tasks ├── Debian.yml ├── RedHat.yml ├── main.yml ├── webupd8.yml ├── webupd8_for_debian.yml └── webupd8_for_ubuntu.yml ├── tests ├── ansible.cfg ├── group_vars │ └── test ├── inventory └── test.yml └── vars ├── Ubuntu.yml └── main.yml /.travis.yml: -------------------------------------------------------------------------------- 1 | --- 2 | language: python 3 | python: "2.7" 4 | 5 | env: 6 | - SITE=test.yml 7 | 8 | before_install: 9 | - sudo apt-get update -qq 10 | - sudo apt-get install -y curl 11 | 12 | install: 13 | # Install Ansible. 14 | - pip install ansible==1.6.3 15 | 16 | script: 17 | - "cd tests" 18 | 19 | # Check the role/playbook's syntax. 20 | - "ansible-playbook -i inventory $SITE --syntax-check" 21 | 22 | # Run the role/playbook with ansible-playbook. 23 | - "ansible-playbook -i inventory $SITE --connection=local --sudo" 24 | 25 | # Run the role/playbook again, checking to make sure it's idempotent. 26 | - > 27 | ansible-playbook -i inventory $SITE --connection=local --sudo 28 | | grep -q 'changed=0.*failed=0' 29 | && (echo 'Idempotence test: pass' && exit 0) 30 | || (echo 'Idempotence test: fail' && exit 1) 31 | 32 | # Make sure Java is installed. 33 | - > 34 | which java 35 | && (echo 'Java is installed' && exit 0) 36 | || (echo 'Java is not installed' && exit 1) 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Santiago M. Mola 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a 4 | copy of this software and associated documentation files (the "Software"), 5 | to deal in the Software without restriction, including without limitation 6 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 | and/or sell copies of the Software, and to permit persons to whom the 8 | Software is furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 14 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19 | DEALINGS IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Ansible Java Role 2 | ================= 3 | 4 | [![Build Status](https://travis-ci.org/smola/ansible-java-role.svg?branch=master)](https://travis-ci.org/smola/ansible-java-role) 5 | 6 | Manages installation of Java JREs and JDKs. It supports both OpenJDK and Oracle 7 | JRE and JDK 6, 7 and 8. All of them are installed using the package manager. 8 | 9 | Requirements 10 | ------------ 11 | 12 | None. 13 | 14 | Role Variables 15 | -------------- 16 | 17 | The `java_packages` variable must be set to a list of the desired Java packages. For example: 18 | 19 | ```yaml 20 | java_packages: 21 | - openjdk-6-jdk 22 | - oracle-java7-installer 23 | ``` 24 | 25 | # Debian / Ubuntu 26 | 27 | Valid packages for Debian and Ubuntu are: 28 | 29 | - openjdk-6-jre 30 | - openjdk-6-jre-headless 31 | - openjdk-6-jdk 32 | - openjdk-7-jre 33 | - openjdk-7-jre-headless 34 | - openjdk-7-jdk 35 | - oracle-java6-installer 36 | - oracle-java7-installer 37 | - oracle-java8-installer 38 | 39 | 32bit Java may be installed on x86 platforms appending `:i386` to the package name. 40 | 41 | You can ensure that Oracle JDK is set as the default JDK by adding `oracle-java6-set-default`, `oracle-java7-set-default` or `oracle-java6-set-default` to the `java\_packages` list. 42 | 43 | # Fedora 44 | 45 | Valid packages for Fedora are: 46 | 47 | - java-1.7.0-openjdk 48 | - java-1.8.0-openjdk 49 | 50 | # Others 51 | 52 | Got this role working with a different distro? Please, [report it on GitHub](http://github.com/smola/ansible-java-role/issues) or drop me a line at santi@mola.io. 53 | 54 | Dependencies 55 | ------------ 56 | 57 | None. 58 | 59 | Example Playbook 60 | ------------------------- 61 | 62 | - hosts: servers 63 | roles: 64 | - { role: smola.java } 65 | 66 | License 67 | ------- 68 | 69 | Copyright (c) Santiago M. Mola 70 | 71 | ansible-java-role is released under the terms of the MIT License. 72 | 73 | 74 | Acknowledgements 75 | ---------------- 76 | 77 | Thanks to Jeff Geerling ([@geerlingguy](https://github.com/geerlingguy)) from whom I have borrowed some ideas from his [ansible-java-role](https://github.com/geerlingguy/ansible-role-java) and [Testing Ansible Roles with Travis CI on GitHub](https://servercheck.in/blog/testing-ansible-roles-travis-ci-github). 78 | -------------------------------------------------------------------------------- /defaults/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | java_packages: [] 3 | java_cleanup: True 4 | -------------------------------------------------------------------------------- /meta/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | galaxy_info: 3 | author: Santiago M. Mola 4 | description: OpenJDK / Oracle JDK 6, 7 and 8. 5 | license: MIT 6 | min_ansible_version: 1.9.6 7 | platforms: 8 | - name: Ubuntu 9 | versions: 10 | - all 11 | - name: Debian 12 | versions: 13 | - all 14 | - name: EL 15 | versions: 16 | - all 17 | - name: Fedora 18 | versions: 19 | - all 20 | categories: 21 | - development 22 | - system 23 | dependencies: [] 24 | -------------------------------------------------------------------------------- /tasks/Debian.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - include_vars: Ubuntu.yml 4 | 5 | - name: Install python-apt 6 | apt: pkg=python-apt 7 | 8 | - include: webupd8_for_debian.yml 9 | when: "ansible_distribution != 'Ubuntu'" 10 | 11 | - include: webupd8_for_ubuntu.yml 12 | when: ansible_distribution == 'Ubuntu' 13 | 14 | - name: Accept Oracle License 15 | debconf: name={{ item }} question='shared/accepted-oracle-license-v1-1' value='true' vtype='select' 16 | with_items: 17 | - oracle-java6-installer 18 | - oracle-java7-installer 19 | - oracle-java8-installer 20 | when: java_needs_oracle 21 | 22 | - name: Install Java packages 23 | apt: pkg={{ item }} state=latest 24 | with_items: "{{ java_packages }}" 25 | 26 | - name: Remove unwanted Java packages 27 | apt: pkg={{ item }} state=absent 28 | with_items: "{{ java_packages_to_remove }}" 29 | when: java_cleanup 30 | -------------------------------------------------------------------------------- /tasks/RedHat.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Install Java packages 4 | yum: name={{ item }} state=latest 5 | with_items: "{{ java_packages }}" 6 | when: ansible_os_family == 'RedHat' 7 | -------------------------------------------------------------------------------- /tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - include: Debian.yml 3 | when: ansible_os_family == 'Debian' 4 | -------------------------------------------------------------------------------- /tasks/webupd8.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | -------------------------------------------------------------------------------- /tasks/webupd8_for_debian.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | - name: Install WebUpd8 apt key 4 | apt_key: id=EEA14886 keyserver='keyserver.ubuntu.com' state=present 5 | register: webupd8key 6 | until: webupd8key|success 7 | retries: 5 8 | delay: 10 9 | 10 | - name: Install WebUpd8 Team Java PPA (for Oracle Java) 11 | apt_repository: repo='deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main' state=present mode=0644 12 | when: java_needs_oracle 13 | 14 | - name: Remove WebUpd8 Team Java PPA (for Oracle Java) 15 | apt_repository: repo='deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main' state=present mode=0644 16 | when: java_cleanup and not java_needs_oracle 17 | -------------------------------------------------------------------------------- /tasks/webupd8_for_ubuntu.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Install WebUpd8 Team Java PPA (for Oracle Java) 3 | apt_repository: repo='ppa:webupd8team/java' state=present mode=0644 4 | when: java_needs_oracle 5 | register: webupd8ppa 6 | until: webupd8ppa|success 7 | retries: 5 8 | delay: 10 9 | 10 | - name: Remove WebUpd8 Team Java PPA (for Oracle Java) 11 | apt_repository: repo='ppa:webupd8team/java' state=present mode=0644 12 | when: java_cleanup and not java_needs_oracle 13 | -------------------------------------------------------------------------------- /tests/ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | roles_path=../../ 3 | -------------------------------------------------------------------------------- /tests/group_vars/test: -------------------------------------------------------------------------------- 1 | --- 2 | java_packages: 3 | - oracle-java8-set-default 4 | - oracle-java8-installer 5 | - openjdk-6-jdk 6 | -------------------------------------------------------------------------------- /tests/inventory: -------------------------------------------------------------------------------- 1 | [test] 2 | localhost 3 | -------------------------------------------------------------------------------- /tests/test.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: test 3 | remote_user: root 4 | roles: 5 | - ansible-java-role 6 | -------------------------------------------------------------------------------- /vars/Ubuntu.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # JREs are not included in the list. 3 | # Otherwise, JDK would be incorrectly 4 | # cleaned up. 5 | java_packages_full: 6 | - openjdk-6-jdk 7 | - openjdk-6-jdk:i386 8 | #- openjdk-6-jre 9 | #- openjdk-6-jre:i386 10 | #- openjdk-6-jre-headless 11 | #- openjdk-6-jre-headless:i386 12 | #- openjdk-6-jre-zero 13 | #- openjdk-6-jre-zero:i386 14 | - openjdk-7-jdk 15 | - openjdk-7-jdk:i386 16 | #- openjdk-7-jre 17 | #- openjdk-7-jre:i386 18 | #- openjdk-7-jre-headless 19 | #- openjdk-7-jre-headless:i386 20 | #- openjdk-7-jre-zero 21 | #- openjdk-7-jre-zero:i386 22 | java_packages_to_remove: "{{ java_packages_full | difference(java_packages) }}" 23 | -------------------------------------------------------------------------------- /vars/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | java_needs_oracle: "{{ java_packages | join | search('oracle') }}" 3 | --------------------------------------------------------------------------------