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

Как получить более чистый вывод от заданий Ansible?

На этой неделе я нахожу время, чтобы разобраться в Ansible.

Несмотря на наличие:

$ ansible-config dump | grep -i ^ans.*color
ANSIBLE_FORCE_COLOR(default) = False
ANSIBLE_NOCOLOR(env: ANSIBLE_NOCOLOR) = True

Я получаю в выводе ANSI-мусор:

...
resizewin: timeout reading from terminal
...
Shared connection to host.example.com closed.

^[[45;160R       25.22 real         2.64 user         1.49 sys
$ 5;160R5;160R5;160R5;160R

Кроме того, есть ли способ получить просто в stdout работы ansible без артефактов Ansible

 host.example.com | CHANGED | rc=0 >>

и

Shared connection to host.example.com closed.

Я вижу, что в некоторых ситуациях результат имеет значение, но в других ситуациях я хотел бы иметь возможность фиксировать только stdout. Сейчас я прибегаю к head и tail уловки, чтобы разделить первую строку и последние две строки вывода, что работает, но утомительно.

$ ansible-config dump --only-changed
ANSIBLE_NOCOLOR(/usr/local/etc/ansible/ansible.cfg) = True
DEFAULT_PRIVATE_KEY_FILE(/usr/local/etc/ansible/ansible.cfg) = /home/jim/.ssh/my-ansible-id_rsa

Для этого случая ansible вывод иногда включает в себя dict возвращаемых значений, а предупреждения отправляются на stderr. Но первая строка выглядит как нечто предназначенное для потребления человеком, а не как машина. К тому же вы можете запустить только одну задачу.

Если вы вообще анализируете результаты задачи, написать пьесу и запустить его с ansible-playbook. Может быть коротко, это нормально.

- name: Do a thing
  register: result
  command: /bin/uptime

- name: Print result dict
  debug:
    var: result

Доступны выражения дзиндзя. Распечатайте только ту переменную, которая вас интересует (возможно, result.stdout), отобразите шаблон, запустите другую команду на основе стандартного вывода или выполните любое количество действий с результатом.