在ansible playbook中为一个任务设置分叉

时间:2015-11-12 16:04:03

标签: ansible

我的剧本中有一项任务,我想一次只在一台主机上运行。其余的任务我想要尊重--forks选项。这可能吗?

4 个答案:

答案 0 :(得分:3)

是结帐rolling updates

具体来说,你可以添加一个" serial:x"游戏参数,其中x是分叉数

答案 1 :(得分:2)

是的,可以通过使用throttle keyword

并发任务的数量限制在任务,块和剧本级别上运行。这个 独立于分叉和序列设置,但不能设置为高于 这些限制。例如,如果前叉设置为10,油门设置为15, 最多可以并行操作10个主机。

示例:

---

- hosts: all
  tasks:
      - name: wait in parallel
        command: sleep 20
      - name: wait  in serial
        command: sleep 30
        throttle: 1

throttle关键字在Ansible since version 2.9中可用。

答案 2 :(得分:0)

在Ansible的术语文档词汇表中,有此段落

  

滚动更新

     

一次寻址一组N中的多个节点的行为   避免一次全部更新并使系统脱机。对于   例如,在具有500个节点的Web拓扑中,该节点处理的流量非常大,   一次更新10或20台计算机可能是合理的,   完成后,跳至下一个10或20。 Ansible中的serial:关键字   playbooks控制滚动更新池的大小。默认是   一次解决批次大小,这就是您要做的事情   必须选择加入。操作系统配置(例如确保配置文件   正确)通常不必使用滚动更新模型,但是   可以根据需要这样做。

使用--forks=Xserial:剧本构造无法 限制单个任务按顺序运行。这是因为serial:关键字仅适用于剧本。在这里,您唯一的办法是将您的任务分成2本剧本,并将包括要按顺序运行的任务的整个剧本限制为serial: 1

示例

$ cat helloansible.yml
---
- hosts: all
  serial: 1

  tasks:
    - debug:
        msg: "hello ansible - serial"

- hosts: all

  tasks:
    - debug:
        msg: "hello ansible - batched"

当我针对清单运行此命令时,您会看到第一个剧本遍历清单中的每个主机:

$ ansible-playbook -i inventory/lab helloansible.yml -l server*

PLAY [all] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [server-01a.lab1.mydom.local]

TASK [debug] ************************************************************************************************************************************************************************************************
ok: [server-01a.lab1.mydom.local] => {
    "msg": "hello ansible - serial"
}

PLAY [all] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [server-01b.lab1.mydom.local]

TASK [debug] ************************************************************************************************************************************************************************************************
ok: [server-01b.lab1.mydom.local] => {
    "msg": "hello ansible - serial"
}

PLAY [all] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [server-redis-01a.lab1.mydom.local]

TASK [debug] ************************************************************************************************************************************************************************************************
ok: [server-redis-01a.lab1.mydom.local] => {
    "msg": "hello ansible - serial"
}

PLAY [all] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [server-redis-01b.lab1.mydom.local]

TASK [debug] ************************************************************************************************************************************************************************************************
ok: [server-redis-01b.lab1.mydom.local] => {
    "msg": "hello ansible - serial"
}

PLAY [all] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [server-redis-01c.lab1.mydom.local]

TASK [debug] ************************************************************************************************************************************************************************************************
ok: [server-redis-01c.lab1.mydom.local] => {
    "msg": "hello ansible - serial"
}

在运行的第二本剧本中:

PLAY [all] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************************************
ok: [server-01b.lab1.mydom.local]
ok: [server-redis-01a.lab1.mydom.local]
ok: [server-redis-01c.lab1.mydom.local]
ok: [server-redis-01b.lab1.mydom.local]
ok: [server-01a.lab1.mydom.local]

TASK [debug] ************************************************************************************************************************************************************************************************
ok: [server-01a.lab1.mydom.local] => {
    "msg": "hello ansible - batched"
}
ok: [server-01b.lab1.mydom.local] => {
    "msg": "hello ansible - batched"
}
ok: [server-redis-01a.lab1.mydom.local] => {
    "msg": "hello ansible - batched"
}
ok: [server-redis-01b.lab1.mydom.local] => {
    "msg": "hello ansible - batched"
}
ok: [server-redis-01c.lab1.mydom.local] => {
    "msg": "hello ansible - batched"
}

PLAY RECAP **************************************************************************************************************************************************************************************************
server-01a.lab1.mydom.local : ok=4    changed=0    unreachable=0    failed=0
server-01b.lab1.mydom.local : ok=4    changed=0    unreachable=0    failed=0
server-redis-01a.lab1.mydom.local : ok=4    changed=0    unreachable=0    failed=0
server-redis-01b.lab1.mydom.local : ok=4    changed=0    unreachable=0    failed=0
server-redis-01c.lab1.mydom.local : ok=4    changed=0    unreachable=0    failed=0

答案 3 :(得分:0)

使用节流选项,该选项允许每个任务的派生数目与命令行中定义的数目不同。该选项仅在ansible 2.9中可用