
throttle 키워드의 작동 방식을 사용하고 이해하려고 노력 중입니다.
다음은 제가 사용하는 방법입니다(test-playbook.yaml).
---
- name: Test throttle
hosts: all
tasks:
# list of pre tasks
- name: Execute sequentially
throttle: 1
block:
- include_tasks: task-1.yaml
- include_tasks: task-2.yaml
# a task using some module
# a task using some module
# list of post tasks
실행됨ansible-playbook --inventory some-inventory --limit host1:host2:host3
나는 임무에서 그것을 기대하고 있다(순차적으로 실행), --limit에 지정된 모든 호스트는 순차적으로 실행됩니다. 즉, 호스트1이 블록의 모든 작업을 완료한 다음, 호스트2, 호스트3이 차례로 실행됩니다.
그러나 병렬로 실행됩니다(기본 Ansible 동작).
누군가 이해하는 데 도움을 줄 수 있습니까?조절판행동? 일부 구성을 놓쳤습니까?
forks/serial
기본값을 갖습니다.
그리고 순차적인 동작을 어떻게 달성할 수 있나요?
답변1
작업 실행은 다음에 정의된 대로 호스트 배치별로 고정 단계로 진행됩니다.직렬(기본값 모두). 최대포크 한도의 호스트가 실행됩니다각 작업을 동시에그리고 다음 호스트 시리즈배치가 완료될 때까지 다음 작업을 진행하기 전에.
조절판"의 목적을 달성합니다.특정 작업에 대한 작업자 수 제한 ... CPU 집약적이거나 속도 제한 API와 상호 작용할 수 있는 작업을 제한하려면 스로틀을 사용하세요.".
예를 들어, 기본적으로 작업을 병렬로 실행합니다(다음으로 제한됨).연속물최대포크) 호스트
- hosts: host1,host2,host3
tasks:
- command: sleep 1
register: result
- debug:
msg: "{{ inventory_hostname }} task1
{{ result.start }} - {{ result.end }}"
모든 호스트가 작업을 병렬로 실행한 것을 볼 수 있습니다.
ok: [host2] =>
msg: host2 task1 2021-07-23 08:56:14.735263 - 2021-07-23 08:56:15.759474
ok: [host1] =>
msg: host1 task1 2021-07-23 08:56:14.743419 - 2021-07-23 08:56:15.759518
ok: [host3] =>
msg: host3 task1 2021-07-23 08:56:14.475249 - 2021-07-23 08:56:15.551159
실행을 다음으로 제한하는 경우조절판
- command: sleep 1
register: result
throttle: 1
- debug:
msg: "{{ inventory_hostname }} task2
{{ result.start }} - {{ result.end }}"
작업 실행이 직렬화되어 있는 것을 확인할 수 있습니다.
ok: [host2] =>
msg: host2 task2 2021-07-23 08:56:20.252623 - 2021-07-23 08:56:21.312210
ok: [host3] =>
msg: host3 task2 2021-07-23 08:56:22.688410 - 2021-07-23 08:56:23.744130
ok: [host1] =>
msg: host1 task2 2021-07-23 08:56:17.937011 - 2021-07-23 08:56:18.955631
실험을 시작하기 전에 시간이 동기화되었는지 확인하세요.
큐:"include_tasks를 사용하면 동일한 동작이 발생하지 않습니다. 포함된 모든 작업이 병렬로 실행됩니다."
A: 문제를 재현할 수 없습니다. 주어진 파일
shell> ansible --version
ansible 2.10.1
shell> cat test-119-tasks-2.yml
---
- command: sleep 1
register: result
- debug:
msg: "{{ inventory_hostname }} task2
{{ result.start }} - {{ result.end }}"
shell> cat test-119-tasks-3.yml
---
- command: sleep 1
register: result
- debug:
msg: "{{ inventory_hostname }} task3
{{ result.start }} - {{ result.end }}"
작업
- name: Execute sequentially
throttle: 1
block:
- include_tasks: test-119-tasks-2.yml
- include_tasks: test-119-tasks-3.yml
준다
TASK [include_tasks] ***********************************************
included: /export/scratch/tmp8/test-119-tasks-2.yml for host1, host2, host3
TASK [command] *****************************************************
changed: [host1]
changed: [host2]
changed: [host3]
TASK [debug] *******************************************************
ok: [host1] =>
msg: host1 task2 2021-07-25 10:56:11.832219 - 2021-07-25 10:56:12.848834
ok: [host2] =>
msg: host2 task2 2021-07-25 10:56:14.312498 - 2021-07-25 10:56:15.330202
ok: [host3] =>
msg: host3 task2 2021-07-25 10:56:16.751018 - 2021-07-25 10:56:17.774723
TASK [include_tasks] ***********************************************
included: /export/scratch/tmp8/test-119-tasks-3.yml for host1, host2, host3
TASK [command] ******************************************************
changed: [host1]
changed: [host2]
changed: [host3]
TASK [debug] ********************************************************
ok: [host1] =>
msg: host1 task3 2021-07-25 10:56:20.373052 - 2021-07-25 10:56:21.405847
ok: [host2] =>
msg: host2 task3 2021-07-25 10:56:22.761254 - 2021-07-25 10:56:23.788941
ok: [host3] =>
msg: host3 task3 2021-07-25 10:56:25.134650 - 2021-07-25 10:56:26.151786
포함된 작업의 실행이 직렬화되어 있는 것을 확인할 수 있습니다. 키워드가 예상대로 작동합니다.조절판에서 허용됩니다.차단하다. 이러한 키워드를 블록에 적용하는 것은 이 키워드를 블록의 모든 작업에 적용하는 것과 동일합니다.