使用if语句的Ansible处理程序

时间:2017-04-02 14:25:10

标签: ansible pytorch ansible-handlers

我有一个apache playbook需要在centos 7和centos 6上运行。我希望根据分发主要版本触发处理程序。我有一个名为restart apache on 7的处理程序和另一个名为restart apache on 6的处理程序。

我的handlers/main.yml看起来像这样

 ---
 - name: restart apache on 7
  systemd: name=httpd state=restarted

 - name: restart apache on 6
   service: name=httpd state=restarted

我尝试在tasks/main.yml中执行以下操作,但似乎遇到了与通知脚本有关的语法问题。

- name: Copy custom configs
  copy:
   dest: /etc/httpd/conf/
   src: httpd.conf
   owner: root 
  notify: {%if ansible_distribution_major_version >= '7.0' %}restart apache on 7 {%else%} restart apache on 6 {%endif%}

有关如何编写通知语句以实现目标的任何线索?

1 个答案:

答案 0 :(得分:1)

对于一般解决方案,您可以使用topics,但我不确定您为什么要使用setInterval模块而不是systemd - 后者应涵盖CentOS 6和7没有任何区别。

同样使用service的算术比较,而不是像示例中的字符串比较。

处理主题的处理程序:

ansible_distribution_major_version

并通知他们的任务:

---
- name: restart apache on 7
  systemd: name=httpd state=restarted
  when: ansible_distribution_major_version >= 7
  listen: "restart apache"

- name: restart apache on 6
  service: name=httpd state=restarted
  when: ansible_distribution_major_version < 7
  listen: "restart apache"