Hiển thị đầu ra với Ansible


38

Tôi có một trò chơi Ansible cho PGBouncer , hiển thị một số đầu ra từ mô-đun thống kê được tích hợp trong PGBouncer.

Vấn đề của tôi là khi Ansible in đầu ra cho thiết bị đầu cuối, nó sẽ xử lý các dòng mới. Thay vì nhìn thấy

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

tôi hiểu rồi

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

Có ai biết làm thế nào để Ansible "in đẹp" đầu ra không?

Câu trả lời:


14

Không có cách nào để làm những gì bạn muốn trong Ansible. Bạn có thể làm điều này như một cách giải quyết:

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

1
Trên OSX tôi đã phải sử dụng sed -e 's/\\n/'$'\\\n/g'. Cũng có liên quan: Comicjk.com/20
Navin

4
xem sorins trả lời serverfault.com/a/846232/240508 là câu trả lời đúng trong năm 2017 và ansible> 2.3
Vadimo

Chủ yếu \nxuất hiện trong kết quả, vì vậy bạn có thể sử dụng biểu thức chính quy này trong thông báo gỡ lỗi của mình:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml

62

Nếu bạn muốn đầu ra thân thiện hơn với con người, hãy xác định:

ANSIBLE_STDOUT_CALLBACK=debug

Điều này sẽ làm cho ansible sử dụng mô-đun đầu ra gỡ lỗi (được đặt tên trước đó human_log) mặc dù tên không may của nó ít dài dòng hơn và dễ đọc hơn bởi con người.

Nếu bạn gặp lỗi mà mô-đun này không khả dụng, hãy nâng cấp Ansible hoặc thêm mô-đun này cục bộ nếu bạn không thể nâng cấp ansible, nó sẽ hoạt động với hơn các phiên bản của ansible như 2.0 hoặc có thể là 1.9.

Một tùy chọn khác để định cấu hình này là thêm stdout_callback = debugvào ansible.cfg của bạn


13
đây sẽ là câu trả lời CHẤP NHẬN trong năm 2017, sản lượng nhật ký thân thiện với con người được vận chuyển ra khỏi hộp.
Vadimo

1
Dưới đây là một số mẹo khác để làm cho điều này lâu dài hơn: github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65

1
Hoặc ANSIBLE_STDOUT_CALLBACK=yaml. Tôi thích nó bởi vì nó định dạng tốt fail msgkhi tôi cung cấp một đối tượng.
Marinos An


12

Tìm thấy cách này trong diễn đàn nhóm Dự án Ansible:

- 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') }}"

Về cơ bản, chúng tôi biến điều này thành danh sách bằng cách chia nó theo dòng mới và sau đó in danh sách đó.


Điều đó làm cho đầu ra vỏ dễ đọc hơn nhiều! Tốt đẹp!
Asfand Qazi

Giải pháp này dường như có một nhược điểm lớn - nếu việc thực hiện mô-đun "Thử nghiệm ví dụ" không thành công, thường thì toàn bộ quá trình xây dựng playbook sẽ không bao giờ thấy đầu ra được định dạng, đặc biệt là đầu ra cho stderr có lẽ thú vị nhất.
René

@ René bạn nói đúng. Vì vậy, bạn có thể thêm ignore_errors: yesvào lệnh ban đầu và sau đó là một cái gì đó như `- assert: that:" test.rc == 0 ".
jhutar


0

Nếu bạn muốn thấy nó ở định dạng thực tế bắt chước đầu ra tiêu chuẩn, bạn có thể sử dụng debugplugin gọi lại với debugmô-đun trong Ansible 2.7+ như thế này:

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.