Есть ли способ с помощью 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
параметр.
Сначала вам нужно объединить словари в список и перебирать элементы в шаблоне.