Подтвердить что ты не робот

Как я могу получить журналы/детали выполнения модулей с помощью незанятых модулей?

Скажем, я выполняю следующее.

$ cat test.sh
#!/bin/bash
echo Hello World
exit 0

$ cat Hello.yml
---

- hosts: MyTestHost
  tasks:
  - name: Hello yourself
    script: test.sh


$ ansible-playbook  Hello.yml

PLAY [MyTestHost] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [MyTestHost]

TASK: [Hello yourself] ********************************************************
ok: [MyTestHost]

PLAY RECAP ********************************************************************
MyTestHost                    : ok=2    changed=0    unreachable=0    failed=0

$

Я точно знаю, что это было успешно.

Где/как я вижу "Hello World", отобранный/напечатанный моим script на удаленном хосте (MyTestHost)? Или код возврата/выхода script?

Мое исследование показывает, что можно было бы написать плагин для перехвата вызовов выполнения модуля или что-то в этих строках и записи файла журнала. Я бы предпочел не тратить время на это.

например. что-то вроде stdout ниже (обратите внимание, что я запускаю доступную и не подлежащую прослушиванию):

$ ansible plabb54 -i /project/plab/svn/plab-maintenance/ansible/plab_hosts.txt -m script -a ./test.sh
plabb54 | success >> {
    "rc": 0,
    "stderr": "",
    "stdout": "Hello World\n"
}

$
4b9b3361

Ответ 1

Если вы передадите флаг -v в загружаемую книгу в командной строке, вы увидите stdout и stderr для каждой выполняемой задачи:

$ ansible-playbook -v playbook.yaml

Ansible также имеет встроенную поддержку ведения журнала. Добавьте следующие строки в файл настраиваемой конфигурации:

[defaults] 
log_path=/path/to/logfile

Ansible будет выглядеть в нескольких местах для файла конфигурации:

  • ansible.cfg в текущем каталоге, где вы запустили ansible-playbook
  • ~/.ansible.cfg
  • /etc/ansible/ansible.cfg

Ответ 2

Задача playbook script будет генерировать stdout так же, как и команда без воспроизведения, ее просто нужно сохранить в переменной с помощью register. Как только мы получим это,

Результат должен выглядеть примерно так:

TASK: [Hello yourself] ******************************************************** 
changed: [MyTestHost]

TASK: [Debug hello] *********************************************************** 
ok: [MyTestHost] => {
    "hello": {
        "changed": true, 
        "invocation": {
            "module_args": "test.sh", 
            "module_name": "script"
        }, 
        "rc": 0, 
        "stderr": "", 
        "stdout": "Hello World\r\n", 
        "stdout_lines": [
            "Hello World"
        ]
    }
}

TASK: [Debug hello.stdout as part of a string] ******************************** 
ok: [MyTestHost] => {
    "msg": "The script stdout was `Hello World\r\n`."
}

Ответ 3

Существует также другой способ создания файла журнала.

Перед запуском ansible-playbook выполните следующие команды, чтобы включить ведение журнала:

  • Укажите местоположение для файла журнала.

    экспорт ANSIBLE_LOG_PATH = ~/ansible.log

  • Включить отладку

    export ANSIBLE_DEBUG = True

  • Чтобы проверить этот сгенерированный файл журнала.

    меньше $ ANSIBLE_LOG_PATH

Ответ 4

Используя плагины обратного вызова, вы можете вывести команду вывода команд в читаемой форме с помощью игры: gist: human_log.py

Изменить, например, вывод:

 _____________________________________
< TASK: common | install apt packages >
 -------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||


changed: [10.76.71.167] => (item=htop,vim-tiny,curl,git,unzip,update-motd,ssh-askpass,gcc,python-dev,libxml2,libxml2-dev,libxslt-dev,python-lxml,python-pip)

stdout:
Reading package lists...
Building dependency tree...
Reading state information...
libxslt1-dev is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.


stderr:

start:
2015-03-27 17:12:22.132237

end:
2015-03-27 17:12:22.136859

Ответ 5

Справка по командной строке Ansible, такая как ansible-playbook --help показывает, как увеличить выходную детализацию путем установки более подробного режима (-v) для большей детализации (-v vv) или для многословия отладки соединения (-v vvv), Это должно дать вам некоторые детали, которые вы ищете в stdout, которые вы можете войти в систему.

Ответ 6

Официальные плагины

Вы можете использовать выходные плагины обратного вызова. Например, начиная с Ansible 2.4, вы можете использовать плагин обратного вызова вывода отладки:

# In ansible.cfg:
[defaults]
stdout_callback = debug

(В качестве альтернативы, запустите export ANSIBLE_STDOUT_CALLBACK=debug перед запуском вашей книги игр)

Важно: вы должны запустить ansible-playbook с -v (--verbose), чтобы увидеть эффект. При установленном stdout_callback = debug вывод должен выглядеть примерно так:

TASK [Say Hello] ********************************
changed: [192.168.1.2] => {
    "changed": true,
    "rc": 0
}

STDOUT:


Hello!



STDERR:

Shared connection to 192.168.1.2 closed.

Есть и другие модули, кроме модуля debug если вы хотите, чтобы вывод форматировался по-другому. Есть json, yaml, unixy, dense, minimal и т.д. (Полный список).

Например, с stdout_callback = yaml вывод будет выглядеть примерно так:

TASK [Say Hello] **********************************
changed: [192.168.1.2] => changed=true 
  rc: 0
  stderr: |-
    Shared connection to 192.168.1.2 closed.
  stderr_lines:
  - Shared connection to 192.168.1.2 closed.
  stdout: |2-

    Hello!
  stdout_lines: <omitted>

Сторонние плагины

Если ни один из официальных плагинов не является удовлетворительным, вы можете попробовать плагин human_log. Есть несколько версий: