/ansible-sdkman

An Ansible role that installs, configures, and manages SDKMAN

Primary LanguagePythonApache License 2.0Apache-2.0

Ansible Role: Comcast.sdkman

Galaxy Role Downloads Apache 2.0 licensed Build Status

An Ansible role that performs the following functions:

  • Install SDKMAN
  • Install/uninstall SDKMAN-managed software candidates
  • Set SDK version defaults
  • Manage the SDKMAN configuration file: /path/to/sdkman/etc/config
  • Flush the SDKMAN caches

Warning: Oracle has made it increasingly difficult to install their JDKs, which has impeded the ability to install them via SDKMAN. Consider using the OpenJDK instead or installing/managing the Oracle JDK by other means.

Requirements

None.

Role Variables

See the defaults for a description of each overrideable variable.

Dependencies

None.

Example Playbook

Here's an example!

- hosts: servers
  roles:
    - role: Comcast.sdkman
      sdkman_user: vagrant
      sdkman_group: vagrant
      sdkman_auto_answer: true
      sdkman_update: true
      sdkman_uninstall_packages:
        - { candidate: groovy, version: 1.8.9 }
      sdkman_install_packages:
        - { candidate: java, version: 8.0.202-zulu }
        - { candidate: gradle, version: '3.5' }
        - { candidate: gradle, version: 2.14.1 }
        - { candidate: maven, version: 3.5.0 }
        - { candidate: maven, version: 3.3.9 }
        # Use this syntax if you want SDKMAN to be aware of packages installed *without* SDKMAN, e.g. Oracle JDKs
        - { candidate: java, version: 1.8.0-oracle, localpath: /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk }
      sdkman_defaults:
        gradle: '3.5'
        maven: 3.3.9
        java: 8.0.202-zulu
      sdkman_flush_caches_before:
        - temp
      sdkman_flush_caches_after:
        - archives
        - broadcast
        - candidates
        - temp
      sdkman_offline_mode: false
      sdkman_update_alternatives:
        - candidate: java
          name: java
          link: /usr/bin/java
        - candidate: java
          name: javac
          link: /usr/bin/javac

Additional Notes

If you want to skip any steps that require privilege escalation (i.e. sudo commands), this role has tagged those tasks with the sdkman_privilege tag. Pass the --skip-tags flag on the command-line with this tag in order to bypass any steps that may have already been completed by your system administrator (e.g. installing system packages).

Testing this role with Alpine Linux has been an uphill battle. The more recent JDK builds (>-11) available through SDKMAN are not compatible with Alpine. Instead, it is recommended to install a JDK/JRE through the apk package repository. This all being said, I'm currently unsure how well SDKMAN packages run on Alpine. Your mileage may vary. You have been warned.

License

Apache 2.0

Author Information