gantsign.java

Ansible 角色:Java

测试 Ansible Galaxy 许可证

用于安装 Java JDK 的角色。

要求

  • Ansible Core >= 2.12

  • Linux 发行版

    • Debian 系列

      • Debian

        • Buster (10)
        • Bullseye (11)
      • Ubuntu

        • Bionic (18.04)
        • Focal (20.04)
        • Jammy (22.04)
    • RedHat 系列

      • Rocky Linux

        • 8
      • Fedora

        • 35
    • SUSE 系列

      • openSUSE

        • 15.4
    • 注意:其他版本可能可以工作,但未经过测试。

角色变量

以下变量会改变此角色的行为(默认值如下面所示):

# Java 版本号
# 指定 '8'、'11'、'17' 或 '21' 来获取该版本的最新补丁版本。
java_version: '21.0.2+13'

# Java 发行版的基本安装目录
java_install_dir: '/opt/java'

# 存放在远程机器上下载的 Java 安装文件的目录
java_download_dir: "{{ x_ansible_download_dir | default(ansible_env.HOME + '/.ansible/tmp/downloads') }}"

# 本地机器上可以找到 Java 安装包的位置
# 本地包会优先使用,而不是下载新包。
java_local_archive_dir: '{{ playbook_dir }}/files'

# 是否使用本地存档中的安装包(如果可用)
java_use_local_archive: true

# 如果这是默认安装,将会写入配置脚本以设置
# JAVA_HOME 环境变量,并将 bin 目录添加到 PATH
# 环境变量中。
java_is_default_installation: true

# 与此 Java 安装相关的 Ansible 事实组名称。
#
# 如果你想多次使用此角色以安装多个版本的 Java,
# 可以覆盖此选项。
#
# 例如,java_fact_group_name: java_8
# 将把 Java home 的事实改为:
# ansible_local.java_8.general.home
java_fact_group_name: java

# JDK 可再分发版本的 SHA-256
java_redis_sha256sum:

# JDK 下载的镜像位置(例如:https://example.com/provisioning/files)
java_redis_mirror:

# JDK 可再分发安装文件的文件名
java_redis_filename:

# JDK 下载响应的超时(以秒为单位)
java_download_timeout_seconds: 600

# 对于 Adoptium API 的超时
java_api_timeout_seconds: 30

示例剧本

默认情况下,此角色将安装最新的 LTS JDK 版本,该版本由 Adoptium 提供,并经过测试已知可以正常工作:

- hosts: servers
  roles:
    - role: gantsign.java

你可以通过指定 java_version 来安装特定版本的 JDK。

- hosts: servers
  roles:
    - role: gantsign.java
      java_version: '8.0.402+6'

注意: 使用 curljq,可以通过运行以下命令来查看可用版本:

for i in 21 17 11 8; do (curl --silent http \
  "https://api.adoptium.net/v3/info/release_names?version=%5B$i,$(($i + 1)))\
&release_type=ga" | jq --raw-output '.releases[]' | sed -E 's/^jdk\-?//'); done

你可以通过多次使用此角色来安装多个版本的 JDK:

- hosts: servers
  roles:
    - role: ansible-role-java
      java_version: '8'
      java_is_default_installation: false
      java_fact_group_name: java_8

    - role: ansible-role-java
      java_version: '11'
      java_is_default_installation: true
      java_fact_group_name: java

要执行离线安装,你需要指定更多信息(例如 java_major_versionjava_release_namejava_redis_filenamejava_redis_sha256sum)。例如,要执行 11.0.22+7 的离线安装:

# 在执行离线安装之前,将
# `OpenJDK11U-jdk_x64_linux_hotspot_11.0.22_7.tar.gz` 下载到
# `{{ playbook_dir }}/files/` 目录下。
- hosts: servers
  roles:
    - role: gantsign.java
      java_major_version: '11'
      java_version: '11.0.22+7'
      java_release_name: 'jdk-11.0.22+7'
      java_redis_filename: 'OpenJDK11U-jdk_x64_linux_hotspot_11.0.22_7.tar.gz'
      java_redis_sha256sum: '25cf602cac350ef36067560a4e8042919f3be973d419eac4d839e2e0000b2cc8'

角色事实

此角色导出以下 Ansible 事实供其他角色使用:

  • ansible_local.java.general.version

    • 例如:8u402
  • ansible_local.java.general.home

    • 例如:/opt/java/jdk8u402

重写 java_fact_group_name 将改变事实的名称,例如:

java_fact_group_name: java_8

会把事实的名称更改为:

  • ansible_local.java_8.general.version
  • ansible_local.java_8.general.home

GantSign 的更多角色

你可以在 Ansible Galaxy 找到更多 GantSign 的角色。

开发与测试

该项目使用以下工具:

  • Molecule 用于编排测试场景
  • Testinfra 用于测试远程的更改
  • pytest 测试框架
  • Tox 管理 Python 虚拟环境以进行代码检查和测试
  • pip-tools 用于管理依赖关系

提供了一个 Visual Studio Code 的 开发容器 用于开发和测试此角色。

许可证

MIT

作者信息

约翰·弗里曼

GantSign 有限公司。 公司编号:06109112(在英格兰注册)

安装
ansible-galaxy install gantsign.java
许可证
mit
下载
149.3k
拥有者