Назад | Перейти на главную страницу

Возможная печать имен хостов / переменных в списке / таблице

Есть ли способ с помощью Ansible распечатать простой вывод в виде таблицы. У меня есть значения, которые мне нужно зарегистрировать для переменной в playbook, я просто хочу распечатать их более аккуратно. В настоящее время результат, который у меня есть с stdout.lines, выглядит так:

ok: [sage] => {
    "voutput.stdout_lines": [
        "4.4.5"
    ]
}

ok: [example] => {
    "voutput.stdout_lines": [
        "4.7"
    ]
}

Но было бы неплохо, если бы я мог отформатировать его примерно так:

sage              4.7
example           4.4.5
somethingelse     1.2.3

Есть ли способ сделать что-то в этом направлении непосредственно в Ansible, или мне просто нужно взять результат, который он дает, и преобразовать его чем-то вроде AWK?

Вы можете использовать стандартный обратный вызов вывода json и получать необходимые данные с помощью jq.

хосты:

[test]
srv1 testvar=abc
srv2 testvar=zzzzzz
srv3 testvar=qqqq

playbook.yml:

- hosts: test
  gather_facts: no
  tasks:
    - debug: var=testvar

исполнение:

$ ANSIBLE_STDOUT_CALLBACK=json ansible-playbook playbook.yml | jq -r '.plays[0].tasks[0].hosts | to_entries[] | "\(.key), \(.value.testvar)"'
srv1, abc
srv2, zzzzzz
srv3, qqqq

Ты можешь:

  • изменить вывод журнала Ansible, используя Плагины обратного вызова. Это потребует некоторого кода Python. К сожалению, переезд примеры плагинов похоже, соответствует вашим требованиям.

  • используйте шаблон Jinja2 и сохраните результат в файл с template или copy модуль с content параметр.

    Сначала вам нужно объединить словари в список и перебирать элементы в шаблоне.