首页 > 解决方案 > 当串行参数多于一个时,Ansible 如何处理任务?

问题描述

serial参数为 1 时,Ansible 获取一个主机,然后执行 playbook 中给定的任务,然后再移动到下一个主机。

但是当serial参数多于一个时会发生什么?

例如,如果我有 10 台主机,并且我的串行参数为 3,那么这 3 个任务将如何执行这些任务? 这些任务会一个接一个地执行吗?还是会像默认执行策略一样执行,每个主机将执行第一个任务,然后再执行下一个任务。

我还没有找到任何与此相关的文档。

标签: ansible

解决方案


假设您保持标准策略,playbook 的每次播放都将在您在关键字中指定的多个节点上执行serial,但是一个任务一个任务,所以即使您有一个节点比其他节点运行任务更快,它不会运行下一个任务,直到其他人完成相同的任务。然后将从库存中取出另外 3 个节点。如果你有另一场比赛,同样的场景将被完成。

所以基本上用你的 10 个节点库存就可以了

  • 取3个节点
  • 执行任务
  • 取3个节点
  • 执行任务
  • 取3个节点
  • 执行任务
  • 取剩余节点
  • 执行任务

该行为在https://docs.ansible.com/ansible/2.5/user_guide/playbooks_strategies.html中进行了解释

serial 指令可以将此行为“批处理”到主机的子集,然后在下一个“批处理”开始之前运行到播放完成。

我建议你有这样的测试剧本可以理解playbookplays并且serial

- hosts: all         
  gather_facts: false
  serial: 3          
  tasks:             

    - ping:          
    - ping:          

- hosts: all         
  gather_facts: false
  serial: 5 # test with 5 nodes now          
  tasks:             

    - ping:          
    - ping:          

如果你想模拟行为的差异,你可以使用选项运行你的剧本-C


推荐阅读