Ansible 命令检查不同服务器中的 java 版本

问题描述 投票:0回答:3

我正在使用ansible编写一个测试用例。总共有9台服务器,我需要检查其中安装的java版本是否是1.7.0?

如果小于 1.7.0,则测试用例应该失败。

任何人都可以帮我写这个测试用例,因为我对 ansible 很陌生。

提前致谢

unix ansible
3个回答
32
投票

Ansible 从 1.6 开始就有一个

version_compare
过滤器。但由于 Ansible 不知道您的 Java 版本,您首先需要在单独的任务中获取它并注册输出,以便您可以比较它。

- name: Fetch Java version
  shell: java -version 2>&1 | grep version | awk '{print $3}' | sed 's/"//g'
  register: java_version

- assert:
    that: 
      - java_version.stdout | version_compare('1.7', '>=') 

顺便说一句,如果 Ansible 的主要用例是验证服务器状态,您可能需要考虑使用基础设施测试工具:serverspecgossinspectestinfra


3
投票

虽然在你的问题中你没有具体说明你尝试过什么,但仍然

您可以运行这样的命令

ansible your_host -m command -a 'java -version'

如果您需要解析

java -version
的输出,Glenn Jackman here 有一个非常好的脚本,请根据您的需求进行调整并使用它。

如果您仍在寻求帮助,请更具体并说明您尝试做什么。


3
投票

从 2.0 开始你就可以做到这一点

   - name: Check if java is installed
        command: java -version
        become_user: '{{ global_vars.user_session }}' // your user session
        register: java_result
        ignore_errors: True

      - debug:
          msg: "Failed - Java is not installed"
        when: java_result is failed

      - debug:
          msg: "Success - Java is installed"
        when:  java_result is success
© www.soinside.com 2019 - 2024. All rights reserved.