Ansible로 디스플레이 출력


37

PGBouncer 에 내장 된 통계 모듈의 일부 출력을 표시하는 PGBouncer에 대한 Ansible 플레이가 있습니다.

내 문제는 Ansible이 출력을 터미널에 인쇄 할 때 개행을 엉망으로 만든다는 것입니다. 보지 않고

----------
| OUTPUT |
----------

내가 참조

----------\n| OUTPUT |\n----------

누구든지 Ansible이 출력을 "예쁜 인쇄"하는 방법을 알고 있습니까?

답변:


14

Ansible에서 원하는 것을 수행 할 수있는 방법이 없습니다. 이 문제를 해결 방법으로 수행 할 수 있습니다.

ansible-playbook ... | sed 's/\\n/\n/g'

1
OSX에서는을 사용해야했습니다 sed -e 's/\\n/'$'\\\n/g'. 또한 관련성 : comicjk.com/20
Navin

4
sorins answer serverfault.com/a/846232/240508 을 참조하십시오. 2017 년의 정확한 내용이며> 2.3
Vadimo

대부분 \n결과로 표시되므로 디버그 메시지에서이 정규 표현식을 사용할 수 있습니다.msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml

61

보다 인간 친화적 인 출력을 원한다면 다음을 정의하십시오.

ANSIBLE_STDOUT_CALLBACK=debug

이렇게하면 불행한 이름 이 덜 간결하고 사람이 쉽게 읽을 수 있음에도 불구하고 디버그 출력 모듈 (이전 명칭은 human_log)을 사용할 수있게됩니다.

이 모듈을 사용할 수 없다는 오류가 발생하면 Ansible을 업그레이드하거나 업그레이드 할 수없는 경우이 모듈을 로컬로 추가하십시오. 2.0과 같은 버전 이상 또는 1.9까지 가능합니다.

이것을 구성하는 또 다른 옵션은 stdout_callback = debugansible.cfg 에 추가 하는 것입니다.


13
이것은 2017 년 인간 친화적 인 로그 출력이 즉시 제공되는 ACCEPTED 답변 이어야합니다 .
Vadimo

1
: 여기에 몇 가지 더 팁이 더 영구적으로 github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65

1
또는 ANSIBLE_STDOUT_CALLBACK=yaml. fail msg객체를 제공 할 때 형식이 좋기 때문에 선호 합니다.
마리노스


12

Ansible Project 그룹 포럼 에서이 방법을 찾았습니다 .

- name: "Example test"
  command:
    ...
  register: test
- name: "Example test stdout"
  debug:
    msg: "{{ test.stdout.split('\n') }}"
- name: "Example test stderr"
  debug:
    msg: "{{ test.stderr.split('\n') }}"

우리는 기본적으로 이것을 줄 바꿈으로 나누고 그 목록을 인쇄하여 목록으로 바꿉니다.


그것은 쉘 출력을 훨씬 더 읽기 쉽게 만듭니다! 좋은!
Asfand Qazi

이 솔루션에는 한 가지 큰 단점이 있습니다. "예제 테스트"모듈의 실행이 실패하면 일반적으로 전체 플레이 북 빌드가 실패하고 형식화 된 출력, 특히 가장 흥미로운 stderr에 대한 출력을 볼 수 없습니다.
René

@ René 당신이 맞아요. 이를 ignore_errors: yes위해 원래 명령과 나중에`-assert : that : "test.rc == 0"에 추가 할 수 있습니다 .
jhutar


0

실제로 표준 출력을 모방 한 형식으로 보려면 Ansible 2.7 이상 debug에서 debug모듈 과 함께 콜백 플러그인을 사용할 수 있습니다 .

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.