Ansible测试变量的开头
我需要能够安装一个MySQL库。Python有一个用于v2的包和另一个用于v3的包。我需要能够告诉Ansible安装哪个软件包Ansible测试变量的开头,ansible,Ansible,我需要能够安装一个MySQL库。Python有一个用于v2的包和另一个用于v3的包。我需要能够告诉Ansible安装哪个软件包 - name: Ensure MySQL-python is installed pip: name: MySQL-python state: present become: true when: python_version is regex("^2.*") - name: Ensure mysqlclient is installed
- name: Ensure MySQL-python is installed
pip:
name: MySQL-python
state: present
become: true
when: python_version is regex("^2.*")
- name: Ensure mysqlclient is installed
pip:
name: mysqlclient
state: present
become: true
when: python_version is regex("^3.*")
正则表达式有效,但Ansible将跳过这两个表达式,即使:
- debug:
var: python_version
返回以下内容:
TASK [debug] ****************************************************************************************************************************************************************
ok: [localhost] => {
"python_version": "2.7.10"
}
ansible 2.7.9适用于我。下面的例子
变量:
python_版本:2.7.10
任务:
-调试:
msg:Python版本2
何时:python_版本为正则表达式“^2.*”
给予
msg:Python版本2
对于复杂的测试更方便。下面的例子给出了相同的结果
-调试:
msg:Python版本2
什么时候:
-python_版本为版本'2','>='
-python_版本是“3”版,“适用于我的ansible 2.7.9。下面的例子
变量:
python_版本:2.7.10
任务:
-调试:
msg:Python版本2
何时:python_版本为正则表达式“^2.*”
给予
msg:Python版本2
对于复杂的测试更方便。下面的例子给出了相同的结果
-调试:
msg:Python版本2
什么时候:
-python_版本为版本'2','>='
-python_版本是“3”版,“就像弗拉基米尔说的那样。
另一个改进可能是python_版本的源代码。使用gather_facts时,无需regexp即可完成
---
- hosts: localhost
gather_facts: True
tasks:
- name: do some stuff
debug:
msg: do something because it is python 3
when: ansible_facts.python.version.major is version('3', '=')
- name: do other stuff
debug:
msg: I don't support legacy software
when: ansible_facts.python.version.major is version('2', '=')
就像弗拉基米尔说的。
另一个改进可能是python_版本的源代码。使用gather_facts时,无需regexp即可完成
---
- hosts: localhost
gather_facts: True
tasks:
- name: do some stuff
debug:
msg: do something because it is python 3
when: ansible_facts.python.version.major is version('3', '=')
- name: do other stuff
debug:
msg: I don't support legacy software
when: ansible_facts.python.version.major is version('2', '=')
您是否完全肯定您的python_版本变量在您的剧本中设置正确?就我而言,ansible 2.8.1无法正确再现您的问题和正则表达式匹配。当您可以使用ansible_python_版本在事实中自动获取该变量时,为什么要使用自定义变量?使用下面@Vladimir Botka建议的版本比较会更好。但是如果你的数据一开始就不正确,这也不会起作用。你完全肯定你的python_版本变量在你的剧本中设置正确了吗?就我而言,ansible 2.8.1无法正确再现您的问题和正则表达式匹配。当您可以使用ansible_python_版本在事实中自动获取该变量时,为什么要使用自定义变量?使用下面@Vladimir Botka建议的版本比较会更好。但是,如果您的数据不正确,这也不会起作用。OPs示例中的正则表达式与我的匹配正确,并且正在执行任务ansible 2.8.1。所以我怀疑问题出在别的地方。同时,我完全同意版本比较是这种情况下的良好实践解决方案。OPs示例中的正则表达式对我来说是正确匹配的,并且正在完成ansible 2.8.1中的工作。所以我怀疑问题出在别的地方。同时,我完全同意在这种情况下,版本比较是一个很好的解决方案。当你在virtualenv中时,这是行不通的。ansible_facts.python.version报告的是系统python版本,而不是实际运行ansible的版本。在VirtualNV中,这不起作用。ansible_facts.python.version报告系统python版本,而不是实际运行ansible的版本。