문맥

문맥

문맥

최대 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

건너뛴 작업을 여전히 숨기고 싶은 분들을 위해 이제 두 가지 옵션이 있습니다:

  1. 사용하여기본 콜백 플러그인and를 설정하면 display_skipped_hosts = Falseshow_per_host_start = True작업이 시작될 때 또 다른 로그 라인이 추가되지만 제 시간에 제목을 출력하는 것과 같은 동작은 수행되지 않습니다. (어쨌든 작업이 이미 완료된 후에 나타나기도 하므로 작업이 더 어려워집니다. 읽다)
  2. (현재는 더 이상 사용되지 않음)을 계속 사용하세요.스키피 플러그인이는 기본 플러그인에 건너뛰기 기능이 있기 전에 플러그인으로 이동한 것입니다. 2.11에서도 여전히 예상대로 작동하며 이에 대한 제가 선호하는 수정 사항이기도 합니다. stdout_callback = skippyansible.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
# ...

추가 자료:

답변4

내 경우에는 작업을 완료하기 전에 헤더를 표시하지 않는 "무료" 전략을 사용하고 있었습니다.

관련 정보