基于文件内容的Ansible条件

时间:2014-04-20 13:16:15

标签: python ansible

感激如果有人能指出这有什么问题......

以下代码用于在寄存器模块中设置测试,以打印当前值/etc/timezone。然后有一个任务将它与组/主机{{timezone}}变量进行比较,只有在任务不同时才运行任务(即不会不必要地调用处理程序)。

但它始终无论如何运行。

- name: check current timezone
  shell: cat /etc/timezone
  register: get_timezone

- name: set /etc/timezone
  shell: echo "{{ timezone }}" > /etc/timezone
  when: get_timezone.stdout.find('{{ timezone }}') == false
  notify: update tzdata

...

in group_vars / all.yml:

timezone: Europe/London

1 个答案:

答案 0 :(得分:13)

Python string.find方法返回-1,如果它找不到子串(https://docs.python.org/2/library/string.html,请参阅string.find)。所以,你可以修改你的yml:

- name: set /etc/timezone
  shell: echo "{{ timezone }}" > /etc/timezone
  when: get_timezone.stdout.find('{{ timezone }}') == -1
  notify: update tzdata

或仅使用"而不是":

- name: set /etc/timezone
  shell: echo "{{ timezone }}" > /etc/timezone
  when: '"{{ timezone }}" not in get_timezone.stdout'
  notify: update tzdata