Ansible检查Java,如果RHEL机器上还没有安装,则安装
尝试创建一个作业,该作业将检查java并在返回为未安装时进行安装。除安装部件外,所有部件均可正常工作。Ansible告诉我未满足条件,因此它跳过安装Ansible检查Java,如果RHEL机器上还没有安装,则安装,java,ansible,rhel,Java,Ansible,Rhel,尝试创建一个作业,该作业将检查java并在返回为未安装时进行安装。除安装部件外,所有部件均可正常工作。Ansible告诉我未满足条件,因此它跳过安装 - name: fetch java version shell: java -version 2>&1 | grep version | awk '{print $3}' | sed 's/" //g' changed_when: False register: java_result failed_wh
- name: fetch java version
shell: java -version 2>&1 | grep version | awk '{print $3}' | 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
命令是一个管道,管道的结果值(默认情况下)是管道中最后一个命令的结果。在这种情况下,它是sed
,将正常关闭,因此rc将为0
有很多方法可以解决这个问题;首先想到的是将shell
命令更改为仅运行java-version
。然后您可以检查该命令的rc
值:如果它不是零,那么安装java;如果它是零,那么您可以执行一些奇特的正则表达式来提取版本字符串并打印它
或者,您可以使用stat
模块直接检查java可执行文件是否存在
或者,您可以只运行
yum
块,而不首先检查java
——如果包已经安装,它将不会做任何事情。这可能是最简单的方法。在您的yum
安装中添加state:latest
?谢谢-我确实尝试过,并从ansible收到了相同的消息。可能是yum
未被执行?你能在yum
之前打印rc
值吗?谢谢你的输入JBone,它帮了大忙。注意:Java8是EOL。谢谢lxop。我有点像你说的那样,在没有看到你的答案的情况下迂回地走了。但这是绝对正确的。非常感谢。