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

Ansible command to check the java version in different servers

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

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

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

提前致谢

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

你可以运行这样的命令

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

如果您需要解析 java -version 的输出,Glenn Jackman 提供了一个非常好的脚本 here 根据您的需要调整并使用它。

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

A​​nsible 从 1.6 开始就有 version_compare filter。但是由于 Ansible 不知道您的 Java 版本,您首先需要在单独的任务中获取它并注册输出,以便您可以比较它。

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

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

旁注,如果 Ansible 的主要用例是验证服务器状态,您可能想看看使用基础设施测试工具:serverspec, goss, inspec, testinfra.

从 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