Могу ли я сделать ansible no_log по умолчанию на основе уровня детализации?

Существует множество модулей ansible, которые по умолчанию имеют очень подробный вывод, например sync, file и все os_*, которые имели дурную привычку возвращать огромные результаты на консоль.

Уровень ANSIBLE_VERBOSITY бесполезен для них, потому что даже уровень 0 не удаляет "результаты" из вывода.

Использование альтернативных плагинов вывода через ANSIBLE_STDOUT_CALLBACK — еще одна безнадежная причина, потому что на данный момент ни один из существующих альтернативных обратных вызовов не имел возможности отключить их.

Добавление no_log: true или более разумных альтернатив, таких как no_log: result.rc == 0, к каждому вхождению спам-модуля на практике не масштабируется.

Я знаю, что могу определить no_log: true на уровне playbook, но это не позволяет мне включить ведение журнала условно.


person sorin    schedule 02.02.2018    source источник


Ответы (2)


Если вам нужно «чистое» решение, вам обязательно нужно написать собственный плагин обратного вызова, чтобы уменьшить объем вывода до требуемого уровня.

Но у вас есть возможность использовать этот обходной путь для условного шаблона no_log на основе многословия:

---
- hosts: localhost
  gather_facts: no
  no_log: "{{ verbose_check | default(dict(skipped=true)) | skipped }}"
  vars:
    mydict:
      password: abc
  tasks:
    - debug:
        msg: "Shown only with verbosity > 2"
        verbosity: 3
      register: verbose_check

    - debug:
        var: mydict

Модуль debug имеет встроенную возможность пропуска в зависимости от уровня детализации. Мы можем зарегистрировать его вывод и определить no_log на его основе. И из-за того, что выражения Jinja {{...}} шаблонны при использовании, а не при определении, каждая следующая задача будет оценивать от no_log до true или false в зависимости от пропущенного состояния нашего verbose_check.

person Konstantin Suvorov    schedule 02.02.2018

Вы можете создать шаблон параметра no_log на основе уровня детализации (который отображается в ansible_verbosity, по крайней мере, начиная с версии 2.9).

Это подавит его для одной из задач, если уровень детализации не равен 3 или выше.

- hosts: localhost
  tasks:
  - name: Show verbosity level
    debug:
      var: ansible_verbosity
  - name: Get a list of installed packages
    no_log: "{{ ansible_verbosity < 3 }}"
    package_facts:
      manager: auto

(Это также должно работать во всей игре, если объединить это с этим ответом)

person Gert van den Berg    schedule 25.03.2021