从剧本内部检查Ansible版本

ust*_*erk 11 ansible ansible-playbook

我有一个在Ansible 1.9.x和2.0中以不同方式运行的剧本.我想检查当前在我的剧本中运行的ansible版本,以避免有人用旧版本运行它.

我不认为这是最好的解决方案:

- local_action: command ansible --version
  register: version
Run Code Online (Sandbox Code Playgroud)

你会建议什么?

udo*_*dan 11

您可以使用assert模块:

- assert:
    that: ansible_version.major < 2
Run Code Online (Sandbox Code Playgroud)


sor*_*rin 6

在剧本中比较 ansible 版本的正确方法如下

- hosts: all
  tasks:
    - name: foo
      when: "ansible_version.full is version_compare('2.11', '>=')"
      ...
Run Code Online (Sandbox Code Playgroud)

不要使用字符串比较,否则您会惊讶地发现它无法按预期工作。

  • 发现`version_compare`已被重命名;建议使用 `compare` https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#comparing-versions (2认同)

小智 5

Ansible提供了一个称为ansible_version的全局字典,该字典包含以下内容

"ansible_version": {
        "full": "2.7.4", 
        "major": 2, 
        "minor": 7, 
        "revision": 4, 
        "string": "2.7.4"
    }
Run Code Online (Sandbox Code Playgroud)

您可以在创建条件语句时使用以下ansible_version.full,ansible_version.major或任何其他组合来检查已安装的ansible版本。

示例剧本:使用此字典和when语句。

---
- hosts: localhost
  tasks:

    - name: Print message if ansible version is greater than 2.7.0
      debug:
        msg: "Ansible version is  {{ ansible_version.full }}"
      when: ansible_version.full >= "2.7.4"
Run Code Online (Sandbox Code Playgroud)

  • Ansible 内置了 [版本比较](https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#version-comparison),因此检查 ansible 版本的最稳定的检查是 `ansible_version.full 是版本('2.7.4', '&gt;=')` (5认同)