문맥
최대 1시간의 매우 긴 작업이 포함된 Ansible 플레이북이 있습니다.
매우 단순화되어 다음과 같습니다.
- hosts: localhost
tasks:
- name: Short task
debug:
msg: "I'm quick!"
- name: Long task
shell: "sleep 15s"
사용자가 플레이북을 실행하면 처음에 출력은 다음과 같습니다.
PLAY [localhost] ********************
TASK [Gathering Facts] **************
ok: [127.0.0.1]
TASK [Short task] *******************
ok: [127.0.0.1] => {
"msg": "I'm quick!"
}
(hang there until Long task is done)
TASK [Long task] ********************
changed: [127.0.0.1]
문제
플레이북의 최종 사용자는 플레이북이 거기에 멈춰 있기 때문에 문제가 있다고 생각 Short task
하지만 이로 인해 Long task
지연이 발생합니다.
질문
다음에 정의된 헤더를 인쇄하도록 Ansible 또는 플레이북을 구성하려면 어떻게 해야 합니까?name:
~ 전에작업을 실행하는 중인가요?
내가 달성하려는 것은 다음과 같은 출력입니다.
PLAY [localhost] ********************
TASK [Gathering Facts] **************
ok: [127.0.0.1]
TASK [Short task] *******************
ok: [127.0.0.1] => {
"msg": "I'm quick!"
}
TASK [Long task] ********************
(and hang there during the execution)
changed: [127.0.0.1]
답변1
OP의 요청에 따라 내 의견을 답변으로 마이그레이션
저는 앤서블 2.9.2를 사용하고 있습니다.
stdout_callback
구성 파일을 사용하지 않고 (기본값) 값이 선언되지 않은 구성 파일을 사용하여 시도했습니다 . 두 경우 모두 문제를 재현할 수 없습니다.
이것은 내 테스트 플레이북입니다.
---
- hosts: localhost
gather_facts: false
tasks:
- name: Short running
debug:
msg: I'm a short task
- name: LOOOOOOOOOng task
shell: sleep 2000
결과(두 경우 모두. 참고: 작업 헤더 표시 후 사용자에 의해 중단됨)
$ ansible-playbook /tmp/play.yml
PLAY [localhost] **************************************************************************************************************************************************************************************************
TASK [Short running] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "I'm a short task"
}
TASK [LOOOOOOOOOng task] ******************************************************************************************************************************************************************************************
^C [ERROR]: User interrupted execution
ansible-playbook --version
플레이북을 시작할 디렉터리에 어떤 구성 파일을 로드하고 있는지 다시 확인하세요 . 또한 문제가 해결되는지 확인하기 위해 구성 파일 없이 시도하는 것이 좋습니다. 그런 다음 실제로 문제를 일으키는 설정이 무엇인지 확인하세요.
OP의 의견에서 추가됨: 이 특정 경우에 ansible.cfg의 문제가 있는 설정이 밝혀졌습니다.display_skipped_hosts=False
답변2
/etc/ansible/ansible.cfg display_skipped_hosts=false
에서 문제가 해결되었습니다.
버그인가요? 나는 건너뛴 호스트를 보고 싶지 않지만 내 플레이북의 진행 상황을 보고 싶습니다.
앤서블 2.10.3 사용
답변3
건너뛴 작업을 여전히 숨기고 싶은 분들을 위해 이제 두 가지 옵션이 있습니다:
- 사용하여기본 콜백 플러그인and를 설정하면
display_skipped_hosts = False
각show_per_host_start = True
작업이 시작될 때 또 다른 로그 라인이 추가되지만 제 시간에 제목을 출력하는 것과 같은 동작은 수행되지 않습니다. (어쨌든 작업이 이미 완료된 후에 나타나기도 하므로 작업이 더 어려워집니다. 읽다) - (현재는 더 이상 사용되지 않음)을 계속 사용하세요.스키피 플러그인이는 기본 플러그인에 건너뛰기 기능이 있기 전에 플러그인으로 이동한 것입니다. 2.11에서도 여전히 예상대로 작동하며 이에 대한 제가 선호하는 수정 사항이기도 합니다.
stdout_callback = skippy
ansible.cfg에 설정하세요 . 플러그인도 허용 목록에 추가했는지 확인하기 위해callback_enabled = ansible.posix.skippy
내 ansible.cfg는 이제 다음과 같으며 모두 기본값을 사용하여 최신 ansible.cfg로 마이그레이션하기 전처럼 작동합니다.
[default]
# ...
stdout_callback = skippy
# if you had other plugins here just add to list, comma seperated
callback_enabled = ansible.posix.skippy
# deprecated flag, sometimes still needed, hence I always set both
callback_whitelist = ansible.posix.skippy
# ...
추가 자료:
- 문제에 대한 티켓:https://github.com/ansible/ansible/issues/51042
- 시작 작업 출력을 추가하기 위해 기본 플러그인에 기능을 도입한 PRhttps://github.com/ansible/ansible/pull/53819
- 기본 플러그인에 대한 최신 문서https://docs.ansible.com/ansible/latest/collections/ansible/builtin/default_callback.html
- Skipy 플러그인의 최신 문서https://docs.ansible.com/ansible/latest/collections/ansible/posix/skippy_callback.html
- 콜백 플러그인을 설정하는 방법https://docs.ansible.com/ansible/latest/plugins/callback.html
답변4
내 경우에는 작업을 완료하기 전에 헤더를 표시하지 않는 "무료" 전략을 사용하고 있었습니다.