답변:
플레이 북의 단계를 수행 할 때 병렬 처리를 원하지 않으면 포크 레벨을 1로 설정하십시오.
ansible-playbook --forks=1 ...
이 파일을 사용 가능한 cfg 파일에 넣을 수도 있습니다.
[defaults]
forks=1
그러나 개별적으로 원하는 경우 위의 명령 행 옵션을 사용하십시오.
편집하다:
serial: 1
완전히 다른 일을합니다. 즉, 각 호스트에 대해 플레이 북을 차례로 실행하여 다음 호스트로 이동하기 전에 전체 플레이 북이 완료되기를 기다리는 것과 같습니다. forks=1
즉, 다음 호스트에서 동일한 작업을 실행하기 전에 한 호스트에서 재생중인 첫 번째 작업을 실행하므로 다음 작업을 수행하기 전에 각 호스트에 대해 첫 번째 작업이 실행됩니다.
그래서 당신 forks=1
은 단 한 번의 놀이 를 원합니다 . 불행히도 현재 불가능합니다.
serial: 1
완전히 다른 일을합니다. 즉, 각 호스트에 대해 플레이 북을 차례로 실행하여 다음 호스트로 이동하기 전에 전체 플레이 북이 완료되기를 기다리는 것과 같습니다. forks=1
즉 , 다음 호스트 에서 동일한 작업을 실행하기 전에 한 호스트에서 재생중인 첫 번째 작업을 실행하므로 다음 작업을 수행하기 전에 각 호스트에 대해 첫 번째 작업이 실행됩니다. 그래서 당신 forks=1
은 단 한 번의 놀이 를 원합니다 . 불행히도 현재 불가능합니다.
이 문제에 대한 해결 방법이 있습니다. 호스트 (또는 그룹) 목록을에 전달한 with_items
다음 delegate_to
이 목록과 함께 사용할 수 있습니다 . 이런 식으로 작업이 호스트별로 실행됩니다.
예를 들면 다음과 같습니다.
- name: start and enable rabbitmq (run task host by host)
service:
name: "rabbitmq-server"
state: "started"
enabled: true
delegate_to: "{{ item }}"
with_items: "{{ groups['rabbitmq-cluster'] }}"
run_once: true
run_once: true
거기에 궁금해하는 사람들을 위해 그것을 꺼내보십시오. 당신은 무슨 일이 일어나지 않을 것입니다. (너무 많은 반복 실행 aaaahhhh)
로컬로 실행할 수있는 명령의 경우 루프를 사용하여 재생중인 모든 호스트를 반복하십시오. 명령을 로컬로 실행할 수있는 경우에만 작동합니다. 키가 설정되어 있으면 이러한 방식으로 ssh를 사용하여 원격 시스템에 명령을 하나씩 실행할 수 있지만 에스컬레이션에 대해 이야기 할 때 어려워집니다.
EG :
- name: Init New Appliances - Remove the known hosts entry for the server in case it has changed
run_once: yes
connection: local
become: no
command: "ssh-keygen -R {{ item }}"
with_items:
- "{{ inventory_hostname }}"
inventory_hostname
. 그렇지 않으면 루프가 의미가 없습니다.
serial: 1
최소한 놀이로 설정하도록하겠습니다. 그러나 나는 그것을 놀이의 하위 항목에만 설정하고 싶습니다 (정확한 이름이 무엇이든간에 그것은 "작업"이라고 생각했지만 위의 의견은 동의하지 않는 것 같습니다).