我在我的playbook中有一个任务,我希望一次只在一个主机上运行。其余的任务我想遵守--forks选项。这可能吗?
注:--forks是ansible-playbook命令的一个选项,用于指定并发操作的主机数。我在我的playbook中有一个任务,我希望一次只在一个主机上运行。其余的任务我想遵守--forks选项。这可能吗?
注:--forks是ansible-playbook命令的一个选项,用于指定并发操作的主机数。是的,可以使用throttle
关键字来实现:
在任务、块和剧本级别上限制并发任务运行的数量。这与forks和serial设置无关,但不能高于这些限制。例如,如果forks设置为10,而节流阀设置为15,则最多会并行操作10个主机。
示例:
---
- hosts: all
tasks:
- name: wait in parallel
command: sleep 20
- name: wait in serial
command: sleep 30
throttle: 1
throttle
关键词自 Ansible 2.9 版本开始提供。
是的,结账时请检查滚动更新。
具体来说,您可以为一个play添加“serial: x”参数,其中x是forks的数量。
使用滚动更新
一次性处理一组 N 个节点,以避免全部更新并将系统离线。例如,在一个处理大量数据的 500 个节点的 Web 拓扑结构中,每次更新 10 或 20 台机器是合理的,完成后再继续下一个 10 或 20 台。在 Ansible 的 playbooks 中,serial 关键字控制滚动更新池的大小。默认情况下,会一次性处理整个批次,因此这是您必须选择的内容。操作系统配置(例如确保配置文件正确)通常不必使用滚动更新模型,但如果需要,也可以这样做。
--forks=X
和serial:
剧本构造一起使用时,无法将单个任务限制为按顺序运行。这是因为serial:
关键字仅适用于playbook。您唯一的解决方案是将任务拆分为两个playbook,并将包含要按顺序运行的任务的整个playbook限制为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
使用节流选项,允许每个任务的进程数与命令行中定义的不同。该选项仅在ansible 2.9中可用。