Ansible 检查 Java 并安装(如果尚未安装在 RHEL 机器上)
Ansible to check for Java and install if not already on RHEL machines
正在尝试创建一个作业来检查 java 并在它返回未安装时进行安装。除安装部分外,所有工作正常。 Ansible 告诉我没有满足条件,所以它跳过了安装。
- name: fetch java version
shell: java -version 2>&1 | grep version | awk '{print }' | sed 's/" //g'
changed_when: False
register: java_result
failed_when: False
- name: print java version
debug:
msg: " {{ java_result.stdout }} "
when: java_result.rc==0
- name: install java version
yum:
name: java-1.8.0-openjdk.x86_64
present: yes
when: java_result.rc!=0
有效的最终结果:
- name: fetch java version
shell: java -version
changed_when: False
register: java_result
failed_when: False
- name: install java version
yum:
name: java
state: latest
when: java_result.rc!=0
become: yes
become_user: root
谢谢。
问题是你的shell
命令是一个管道,管道的结果值(默认)是last命令的结果管道。在这种情况下它是 sed
,它将正常关闭,因此将有一个 0
.
的 rc
有多种方法可以解决这个问题;第一个想到的是将 shell
命令更改为仅 运行 java -version
。然后你可以检查该命令的 rc
值:如果它是 non-zero 然后安装 java,如果它是零那么你可以做一些花哨的正则表达式来提取版本字符串并打印它.
或者,您可以使用 stat
模块直接检查是否存在 java 可执行文件。
或者,您可以只 运行 yum
块而不先检查 java
- 如果软件包已经安装,它不会做任何事情。这可能是最 Ansibley 的方式。
正在尝试创建一个作业来检查 java 并在它返回未安装时进行安装。除安装部分外,所有工作正常。 Ansible 告诉我没有满足条件,所以它跳过了安装。
- name: fetch java version
shell: java -version 2>&1 | grep version | awk '{print }' | sed 's/" //g'
changed_when: False
register: java_result
failed_when: False
- name: print java version
debug:
msg: " {{ java_result.stdout }} "
when: java_result.rc==0
- name: install java version
yum:
name: java-1.8.0-openjdk.x86_64
present: yes
when: java_result.rc!=0
有效的最终结果:
- name: fetch java version
shell: java -version
changed_when: False
register: java_result
failed_when: False
- name: install java version
yum:
name: java
state: latest
when: java_result.rc!=0
become: yes
become_user: root
谢谢。
问题是你的shell
命令是一个管道,管道的结果值(默认)是last命令的结果管道。在这种情况下它是 sed
,它将正常关闭,因此将有一个 0
.
有多种方法可以解决这个问题;第一个想到的是将 shell
命令更改为仅 运行 java -version
。然后你可以检查该命令的 rc
值:如果它是 non-zero 然后安装 java,如果它是零那么你可以做一些花哨的正则表达式来提取版本字符串并打印它.
或者,您可以使用 stat
模块直接检查是否存在 java 可执行文件。
或者,您可以只 运行 yum
块而不先检查 java
- 如果软件包已经安装,它不会做任何事情。这可能是最 Ansibley 的方式。