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)
在剧本中比较 ansible 版本的正确方法如下
- hosts: all
tasks:
- name: foo
when: "ansible_version.full is version_compare('2.11', '>=')"
...
Run Code Online (Sandbox Code Playgroud)
不要使用字符串比较,否则您会惊讶地发现它无法按预期工作。
小智 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)