10 台主机的 Ansible playbook 批处理
Ansible playbook batch for 10 hosts
我有一个 ansible 剧本,目前 运行 一次为一台服务器 (serial: 1
) 设置,主机 运行 之间间隔一分钟。
我的清单文件中大约有 200 台主机。
这是我想要做的:我想让 playbook 在 10 台主机上执行,然后我需要验证 运行,然后去下一组 10 台主机。但是在10台主机中,我想串行执行剧本。
我现在想要一批 10 台主机,同时仍 运行 一次连接一台服务器。
我该怎么做?
您可以使用 Ansible 文档 using group position in patterns 部分描述的机制。
简而言之,这可以让您分割一个现有的组,以便只有该组的一个子集:
hosts: all[0:4]
hosts: all[5:9]
hosts: all[10:14]
不过,这将需要您在用例中的每次批量验证后编辑您的剧本,因此不是很方便。
另一方面,您可以根据从本地主机询问的变量构建 hosts
。
鉴于剧本:
- hosts: localhost
gather_facts: no
vars_prompt:
- name: from
prompt: "Where should we start?"
default: 1
private: false
tasks:
- set_fact:
hosts: "all[{{ from }}:{{ from | int + 4 }}]:!localhost"
- hosts: "{{ hostvars['localhost']['hosts'] }}"
gather_facts: no
tasks:
- debug:
msg: "{{ inventory_hostname }}"
以及库存:
all:
hosts:
localhost:
host1:
host2:
host3:
host4:
host5:
host6:
host7:
host8:
host9:
host10:
host11:
这里有一些回顾:
-
Where should we start? [1]:
PLAY [localhost] *****************************************************************************************************************
TASK [set_fact] ******************************************************************************************************************
ok: [localhost]
PLAY [all[1:5]:!localhost] *******************************************************************************************************
TASK [debug] *********************************************************************************************************************
ok: [host1] => {
"msg": "host1"
}
ok: [host2] => {
"msg": "host2"
}
ok: [host3] => {
"msg": "host3"
}
ok: [host4] => {
"msg": "host4"
}
ok: [host5] => {
"msg": "host5"
}
PLAY RECAP ***********************************************************************************************************************
host1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host5 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Where should we start? [1]: 6
PLAY [localhost] *****************************************************************************************************************
TASK [set_fact] ******************************************************************************************************************
ok: [localhost]
PLAY [all[6:10]:!localhost] *******************************************************************************************************
TASK [debug] *********************************************************************************************************************
ok: [host6] => {
"msg": "host6"
}
ok: [host7] => {
"msg": "host7"
}
ok: [host8] => {
"msg": "host8"
}
ok: [host9] => {
"msg": "host9"
}
ok: [host10] => {
"msg": "host10"
}
PLAY RECAP ***********************************************************************************************************************
host10 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host6 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host7 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host8 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host9 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Where should we start? [1]: 11
PLAY [localhost] *****************************************************************************************************************
TASK [set_fact] ******************************************************************************************************************
ok: [localhost]
PLAY [all[11:15]:!localhost] *****************************************************************************************************
TASK [debug] *********************************************************************************************************************
ok: [host11] => {
"msg": "host11"
}
PLAY RECAP ***********************************************************************************************************************
host11 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
请注意 我故意在 1
位置开始第一个切片,因为在我的库存中(参见上面), localhost
是位置 0
的宿主,否则,第一个切片将只有四个元素(因为它会排除 localhost
和 :!locahost
)。
我有一个 ansible 剧本,目前 运行 一次为一台服务器 (serial: 1
) 设置,主机 运行 之间间隔一分钟。
我的清单文件中大约有 200 台主机。
这是我想要做的:我想让 playbook 在 10 台主机上执行,然后我需要验证 运行,然后去下一组 10 台主机。但是在10台主机中,我想串行执行剧本。
我现在想要一批 10 台主机,同时仍 运行 一次连接一台服务器。
我该怎么做?
您可以使用 Ansible 文档 using group position in patterns 部分描述的机制。
简而言之,这可以让您分割一个现有的组,以便只有该组的一个子集:
hosts: all[0:4]
hosts: all[5:9]
hosts: all[10:14]
不过,这将需要您在用例中的每次批量验证后编辑您的剧本,因此不是很方便。
另一方面,您可以根据从本地主机询问的变量构建 hosts
。
鉴于剧本:
- hosts: localhost
gather_facts: no
vars_prompt:
- name: from
prompt: "Where should we start?"
default: 1
private: false
tasks:
- set_fact:
hosts: "all[{{ from }}:{{ from | int + 4 }}]:!localhost"
- hosts: "{{ hostvars['localhost']['hosts'] }}"
gather_facts: no
tasks:
- debug:
msg: "{{ inventory_hostname }}"
以及库存:
all:
hosts:
localhost:
host1:
host2:
host3:
host4:
host5:
host6:
host7:
host8:
host9:
host10:
host11:
这里有一些回顾:
-
Where should we start? [1]: PLAY [localhost] ***************************************************************************************************************** TASK [set_fact] ****************************************************************************************************************** ok: [localhost] PLAY [all[1:5]:!localhost] ******************************************************************************************************* TASK [debug] ********************************************************************************************************************* ok: [host1] => { "msg": "host1" } ok: [host2] => { "msg": "host2" } ok: [host3] => { "msg": "host3" } ok: [host4] => { "msg": "host4" } ok: [host5] => { "msg": "host5" } PLAY RECAP *********************************************************************************************************************** host1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 host2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 host3 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 host4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 host5 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Where should we start? [1]: 6 PLAY [localhost] ***************************************************************************************************************** TASK [set_fact] ****************************************************************************************************************** ok: [localhost] PLAY [all[6:10]:!localhost] ******************************************************************************************************* TASK [debug] ********************************************************************************************************************* ok: [host6] => { "msg": "host6" } ok: [host7] => { "msg": "host7" } ok: [host8] => { "msg": "host8" } ok: [host9] => { "msg": "host9" } ok: [host10] => { "msg": "host10" } PLAY RECAP *********************************************************************************************************************** host10 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 host6 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 host7 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 host8 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 host9 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Where should we start? [1]: 11 PLAY [localhost] ***************************************************************************************************************** TASK [set_fact] ****************************************************************************************************************** ok: [localhost] PLAY [all[11:15]:!localhost] ***************************************************************************************************** TASK [debug] ********************************************************************************************************************* ok: [host11] => { "msg": "host11" } PLAY RECAP *********************************************************************************************************************** host11 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
请注意 我故意在 1
位置开始第一个切片,因为在我的库存中(参见上面), localhost
是位置 0
的宿主,否则,第一个切片将只有四个元素(因为它会排除 localhost
和 :!locahost
)。