ansible-playbook中tasks单进程


之前有一个需求,ansible-playbook中需要某一步单步执行,也就是说在有多台服务器时,某个任务只能一台服务器执行完后,另一台服务器才能执行,否者对应集群的服务会出问题

这是一个很简单的需求,ansible中也有对应的实现, --fork 1 或者 使用 serial

但是如果有人忘记加 --fork 1 了呢,而且该任务是在子任务中,使用 include 加载, serial 关键字无法在某一特定任务中使用,只能与 hosts 同级

所幸,在这里 https://www.bountysource.com/issues/26342862-support-for-serial-on-an-individual-task 找到了解决办法,使用 delegate_to

- name: service restart
  # serial: 1 would be the proper solution here, but that can only be set on play level
  # upstream issue: https://github.com/ansible/ansible/issues/12170
  run_once: true
  with_items: '{{play_hosts}}'
  delegate_to: "{{ item }}"
  command: "/bin/service restart"
作者: honmaple
链接: https://honmaple.me/articles/2017/09/ansible-playbook中tasks单进程.html
版权: 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat