当前位置: 首页 > 知识库问答 >
问题:

当串行参数多于一个时,Ansible如何处理任务?

解宏扬
2023-03-14

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

我没有找到任何文件提到这一点。

共有1个答案

李俊雅
2023-03-14

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

所以基本上用你的10个节点清单就可以了

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

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

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

我建议您使用这样的测试剧本来理解playbookplaysserial

- 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:          
 类似资料:
  • 我有一个java和groovy类,由gradle Task运行。我已经设法使它工作,但我不喜欢在命令行中传递参数的方式。下面是我当前通过命令行执行的方法: my build。gradle代码采用这些参数如下所示: 我想知道有没有一种方法可以更好地传递参数,比如: 以及如何在我的java类中使用它们。

  • 但是我不能在一个计时器中处理不同的“计时器任务”。我试图将计时器任务对象添加到构造函数中,但是当我将新的计时器任务(RemindTask1)对象作为参数(内部类的实例)传递时,出现编译错误。 以下是它如何处理一项任务: 但是我完全被多个任务应该如何创建然后运行所困扰。 但是这不起作用,我不知道出了什么问题。当我将新的RemindTask2()作为参数传递时,我遇到了编译错误。

  • 我刚接触Ansible(Ansible2.9.6),最近开始研究一个项目的设计/目录结构。我的任务是配置测试实验室中的设备(特别是不同的思科设备)以支持测试用例。 我希望有一个site.yml文件,包含所有20+测试用例。这个想法是,用户可以根据参数,通过site.yml针对特定的供应商设备类型(Cisco4507、Cisco3850等)执行所有、多个或单个测试用例。 Ansible-Playbo

  • 我试图理解装饰器。我想定义一个可以处理任何任意参数的装饰器。我正在尝试以下方法: 这是基于本教程的,它应该处理任何类型的参数。但是,当我只传递关键字参数时,我得到以下带有函数的输出: 输出: 在所有变量都作为关键字参数传递的情况下,如何避免出现这种错误?

  • 我需要瞄准地图函数中的所有组件,但我只得到其中的最后一个组件。