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 的方式。