Вопрос: Как просмотреть стандартные команды?


Как я могу видеть stdout для команд с текстовыми играми? -v показывает только выводимый результат, а не отдельные команды. Было бы здорово, если бы я мог понять, как это сделать немедленно, поэтому, если что-то не получается или висит, я могу понять, почему.

например

- name: print to stdout
  action: command echo "hello"

будет печатать

TASK: [print variable] ******************************************************** 

hello

117
2017-09-06 21:01


Источник


Связанный: serverfault.com/questions/667252/... - Capi Etheriel
stackoverflow.com/questions/20563639/... - JonnyJD


Ответы:


Я думаю, что вы можете зарегистрировать результат в переменной, а затем распечатать с помощью отладки.

- name: print to stdout
  command: echo "hello"
  register: hello

- debug: msg="{{ hello.stdout }}"

- debug: msg="{{ hello.stderr }}"

118
2017-09-14 13:01



Кроме того, вы можете отлаживать переменную напрямую с помощью - debug: var=hello, Иногда это более полезно для вывода многострочного вывода или вывода модуля Ansible (а не command/shell вывод). - geerlingguy
С этим я столкнулся с проблемой получения Java-данных. Исправление состоит в том, чтобы перенаправить все выходные данные Java на stdout: shell: java -version 2>&1 - Matthias Braun
это ничего лучше, но вы получаете только сообщение stdout после команда успешно завершена. У меня была проблема, в которой, похоже, висела ошибка. Причина в том, что я использовал неправильное имя пользователя для команды rsync, которая замалчивала запрос интерактивного пароля, который просто повесился. Отлаживать было очень сложно - но если бы я мог видеть stdout в реальном времени, я бы сразу понял, что я сделал неправильно. Я бы ЛЮБЛЮ эту функциональность, если это возможно. - Michael B
в то время как это работает, это означает, что ansible делает отладку очень трудной. Представим себе, что первая задача никогда не заканчивается (возможно, это глупо ждет ввода пользователя) ... пользователь никогда не узнает! Кроме того, register модуль или что бы то ни было, не создает объекты, имеющие stdout или stderr переменная set .... так что очень плохо, что мы не просто получаем результат по умолчанию: | - vlad-ardelean


Вместо стандартный вывод Я бы предложил использовать stdout_lines, Для многострочного вывода это намного лучше, например.

- hosts: all
  tasks:
    - name: Run ls.sh and output "ls /"
      script: ls.sh
      register: out

    - debug: var=out.stdout_lines

дает

TASK: [debug var=out.stdout_lines] ******************************************** 
ok: [local] => {
    "var": {
        "out.stdout_lines": [
            "total 61", 
            "lrwxrwxrwx   1 root root     7 Feb 15  2015 bin -> usr/bin", 
            "drwxr-xr-x   6 root root  1024 Aug 24 22:08 boot", 
            "drwxr-xr-x  22 root root  3580 Sep  8 18:41 dev",  
            [...] 
            "drwxr-xr-x   9 root root  4096 Aug 25 19:14 usr", 
            "drwxr-xr-x  13 root root  4096 Feb 25  2015 var"
        ]
    }
}

Что касается вывода в режиме реального времени для целей отладки, есть закрытый отчет об ошибке https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 обсуждая причины, по которым это невозможно, и не будет реализовано.


69
2017-09-08 18:12



+1 для связывания ошибки «в реальном времени». - ntc2
Если я хочу отправить out.stdout_lines (как тело задачи Ansible mail), как я могу отправить его, чтобы он не выглядел так, когда получена электронная почта? [u'total 61 ', u'lrwxrwxrwx 1 корень root 7 февраля 15 2015 bin -> usr / bin', u'drwxr-xr-x 6 root root 1024 Aug 24 22:08 boot ', u' .... .] Я хочу, чтобы это выглядело так, как видно на терминале - Chris F


Я нашел, используя минимальный  stdout_callback с помощью загрузочной книги с подобным воспроизведением дает аналогичный результат использованию ad-hoc ansible.

В вашем ansible.cfg (обратите внимание, что я на OS X, поэтому измените callback_plugins путь к вашей установке)

stdout_callback     = minimal
callback_plugins    = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/plugins/callback

Чтобы такая задача, как эта

---
- hosts: example
  tasks:
   - name: Say hi
     command: echo "hi ..."

Выдает такой вывод, как команда ad-hoc.

example | SUCCESS | rc=0 >>
hi ...

Я использую загрузочную книгу 2.2.1.0


12
2018-04-06 08:12



Хороший плагин обратного вызова, простая пост-обработка может извлекать только стандартный вывод. - RichVel