arolfes.graalvm
Ansible角色:GraalVM
用于安装GraalVM CE的角色。
要求
Ansible >= 5 (Ansible Core >= 2.12)
Linux 发行版
Debian族
Ubuntu
- Focal (20.04)
- Jammy (22.04)
Debian
- Buster (10)
- Bullseye (11)
- Bookworm (12)
RedHat族
Fedora
- 37
- 38
SUSE族
openSUSE
- 15.0
- 15.1
- 15.2
- 15.3
- 15.4
- 15.5
注意:其他版本可能有效,但尚未经过测试。
角色变量
以下变量将改变此角色的行为(默认值如下):
# 指定底层社区jdk版本
# 17.0.7, 17.0.8, 20.0.1, 20.0.2, 21.0.0或21.0.2
graalvm_java_version: '21.0.2'
# GraalVM发行版的基本安装目录
graalvm_install_dir: '/opt/graalvm'
# 存储在远程主机上下载的GraalVM安装文件的目录
graalvm_download_dir: "{{ x_ansible_download_dir | default(ansible_env.HOME + '/.ansible/tmp/downloads') }}"
# 如果是默认安装,配置脚本将写入以设置
# GRAALVM_HOME环境变量
graalvm_is_default_installation: true
# 如果应该将graalvm的bin目录添加到PATH环境变量
# 仅在此也是默认安装时生效
graalvm_add_to_path: true
# GraalVM安装软件包在本地机器上的位置
# 将优先使用本地软件包,而不是下载新软件包。
graalvm_local_archive_dir: '{{ playbook_dir }}/files'
# 是否使用本地归档中的安装软件包(如果可用)
graalvm_use_local_archive: true
# GraalVM可再分发的SHA-256
graalvm_redis_sha256sum:
# GraalVM下载位置(例如:https://example.com/provisioning/files)
# 仅在不是直接从github下载时指定
graalvm_redis_mirror:
# GraalVM可再分发安装文件的文件名
graalvm_redis_filename: "graalvm-community-jdk-{{ graalvm_java_version }}_linux-{{ graalvm_architecture }}_bin.tar.gz"
# 与此GraalVM安装相关的Ansible事实组的名称。
#
# 如果您希望使用此角色多次安装多个版本的GraalVM,请覆盖它。
#
# 例如,graalvm_fact_group_name: graalvm_20_0_2
# 将把GraalVM主目录事实更改为:
# ansible_local.graalvm_20_0_2.general.home
graalvm_fact_group_name: graalvm
# GraalVM下载响应的超时时间(以秒为单位)
graalvm_download_timeout_seconds: 600
# 选择底层架构,x64(意味着amd64)或aarch64
graalvm_architecture: 'x64'
支持的GraalVM版本
以下版本的GraalVM社区jdk在没有任何额外配置的情况下受支持
- 17.0.7
- 17.0.8
- 20.0.1
- 20.0.2
- 21.0.0
- 21.0.2
支持的架构
- x64(意味着amd64)
- aarch64
示例剧本
默认情况下,此角色将安装已测试且已知可以与此角色一起使用的最新GraalVM CE:
- hosts: servers
roles:
- role: arolfes.graalvm
# 结果:
# 新文件 /etc/profile.d/graalvm.sh
# 内容:
# GRAALVM_HOME=/opt/graalvm/jdk-21.0.2
# PATH=${GRAALVM_HOME}/bin:${PATH}
安装旧版本
- hosts: servers
roles:
- role: arolfes.graalvm
graalvm_java_version: '17.0.7'
如果您不希望将GraalVM放入PATH变量中,请将graalvm_add_to_path
设置为false
- hosts: servers
roles:
- role: arolfes.graalvm
graalvm_add_to_path: false
如果您不希望有一个/etc/profile.d/graalvm.sh
文件
- hosts: servers
roles:
- role: arolfes.graalvm
graalvm_is_default_installation: false
您可以通过多次使用此角色来安装多个版本的GraalVM:
- hosts: servers
roles:
# 第一个角色安装graalvm-community-jdk-17.0.7
- role: arolfes.graalvm
graalvm_java_version: '17.0.7'
graalvm_is_default_installation: false
graalvm_fact_group_name: 'graalvm_java_17_0_7'
# 第二个角色安装graalvm-community-jdk-21.0.2并设置为默认GraalVM
- role: arolfes.graalvm
要执行离线安装,您需要指定更多信息(即graalvm_redis_filename和graalvm_redis_sha256sum)。例如,要执行graalvm-19.3.2-java11的离线安装:
# 在执行离线安装之前,下载
# `graalvm-community-jdk-21.0.2_linux-x64_bin.tar.gz`到
# `{{ playbook_dir }}/files/`在本地机器上。
- hosts: servers
roles:
- role: arolfes.graalvm
graalvm_java_version: '21.0.2'
graalvm_use_local_archive: true
graalvm_redis_filename: 'graalvm-community-jdk-21.0.2_linux-x64_bin.tar.gz'
graalvm_redis_sha256sum: 'b048069aaa3a99b84f5b957b162cc181a32a4330cbc35402766363c5be76ae48'
角色事实
此角色导出以下Ansible事实供其他角色使用:
ansible_local.graalvm.general.java_version
- 例如:
21.0.2
- 例如:
ansible_local.graalvm.general.home
- 例如:
/opt/graalvm/jdk-21.0.2
- 例如:
覆盖graalvm_fact_group_name
将更改事实的名称,例如:
graalvm_fact_group_name: graalvm_java_21_0_0
将更改事实名称为:
ansible_local.graalvm_java_21_0_0.general.version
ansible_local.graalvm_java_21_0_0.general.java_version
ansible_local.graalvm_java_21_0_0.general.home
开发与测试
该项目使用Molecule来帮助开发和测试; 此角色使用Testinfra和pytest进行单元测试。
要进行开发或测试,您需要安装以下内容:
由于上述安装可能有些麻烦,此项目包含 Molecule Wrapper。Molecule Wrapper是一个shell脚本,用于安装Molecule及其依赖(除了Linux),然后使用您传递的命令执行Molecule。
要使用Molecule Wrapper测试此角色,请在项目根目录下运行以下命令:
./moleculew test
注意:某些依赖项需要sudo
权限才能安装。
许可证
MIT
致谢
感谢 Gantsign的John提供的molecule wrapper脚本和出色的Ansible角色,这些角色可在ansible-galaxy上找到。
作者信息
亚历山大·罗尔费斯