我正在使用ansible
版本1.6.6
。我的远程服务器CentOs 6.4 minimal
。在远程服务器上,安装了Python 2.6.6
。所以我想在远程服务器上安装2.7.*
。
我必须将其升级为2.7.*
。我找到了安装它的教程。它就在这里Python2.7 Installation on Centos via yum
我的其他一些远程服务器可能是ubuntu或已安装的另一个Centos Python version 2.7.*
。所以这必须是有条件的。但我不知道究竟会安装什么python 2.7版本。它可能是2.7.3
,2.7.4
或更高版本。我必须使用一些通配符条件,如;
- name: Check python version
command: python -V
register: python_version
- debug: var=python_version.stderr
- name: Install Python2.7
......
when: (ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux') and python_version.stderr != 2.7.*
有没有办法在这种情况下使用通配符条件?
答案 0 :(得分:3)
我刚刚在Ansible文档中进行了深入搜索; http://docs.ansible.com/playbooks_conditionals.html#register-variables;
可以使用函数find('your_part')
来完成;
when: python_version.stderr.find('2.7') != 1 and (ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux')
这将检查其中是否包含2.7个字符串。
答案 1 :(得分:1)
这听起来像是Ansible的match
函数的绝佳用例:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#testing-strings
在您的特定示例中,您将使用:
when: python_version.stderr is not match("2.7\..*") and (ansible_distribution == 'CentOS' or ansible_distribution == 'Red Hat Enterprise Linux')