Ansible通配符条件

时间:2014-11-12 08:24:26

标签: ansible ansible-playbook

我正在使用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.32.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.*

有没有办法在这种情况下使用通配符条件?

2 个答案:

答案 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')