Ansible: модуль APT: как получить стандартный вывод?

Используя следующий ответ stackoverflow.com/questions/34026875/, я пытаюсь получить стандартный вывод из модуля ansible apt.

Используя этот очень простой тестовый сборник:

- hosts: localhost
  sudo: true
  tasks:
    - name: 'apt: update & upgrade'
      apt:
        update_cache: yes
        cache_valid_time: 3600
      register: apt
    - debug: msg={{ apt.stdout.split('\n')[:-1] }}

У меня всегда есть это сообщение об ошибке:

фатальный: [localhost]: FAILED! => {"msg": "Задача включает параметр с неопределенной переменной. Ошибка: "объект dict" не имеет атрибута "stdout"

Я пробовал разными способами (установить пакет, удалить,...) и всегда получаю одно и то же сообщение об ошибке.

При использовании debug: msg=apt единственным выходным сообщением, которое я могу получить, является {"cache_update_time": 1531941358, "cache_updated": true, "changed": true}, даже если я устанавливаю или удаляю пакет, который, по моему скромному мнению, является выходным сообщением, которое ничего не значит, потому что "cache_updated": true, "changed": true не означает, что пакеты были установлены или удалены.

В документации по модулю Ansible APT Документация по модулю Ansible APT в разделе "Возвращаемые значения" есть стандартный вывод, возвращаемый success, when needed.

Кто-нибудь знает, как получить реальный и четкий выход из модуля Ansible APT или как заставить Ansible вернуть стандартный вывод (ansible config, ...) и что на самом деле означает "success, * when needed *", потому что мне никогда не удавалось получить стандартный вывод ни при каких обстоятельствах .

С уважением


person moocan    schedule 18.07.2018    source источник
comment
@techraf модуль ansible apt, кажется, получает двоичный файл aptitude `APTITUDE_CMD = module.get_bin_path(aptitude, False)`, но я не эксперт по python!   -  person moocan    schedule 19.07.2018
comment
@techraf, вы имеете в виду, что для метода обновления, установки, очистки aptitude используется python-apt .. поэтому нет вывода или плохой, а для метода безопасного обновления или dist-upgrade есть вывод, потому что aptitude или apt-get используется ?   -  person moocan    schedule 19.07.2018
comment
Честно говоря, я не знаю. Выглядит более-менее так, некоторые другие модули тоже так работали, но вам нужно будет проследить, как именно работает этот модуль и библиотеки. И тогда вы придете только к объяснению, почему. Я не вижу здесь проблемы, которую нужно решить.   -  person techraf    schedule 19.07.2018


Ответы (3)


Если требуется подробный реальный стандартный вывод apt, вы можете использовать командный модуль для запуска обновления apt-get.

Запустите это:

   -  hosts: target
      tasks:
      - name: 'apt test'
        command: apt-get update
        register: hello

      - debug: msg="{{ hello.stdout }}"

Ansible предупредит вас об использовании модуля apt, потому что он имеет определенные функции, подобные ansible.

person Michael Ababio    schedule 20.07.2018

Кажется, что для некоторых операций не существует реального вывода команды, как мы могли бы надеяться.

Итак, when needed относится к выполненной операции.

Большое спасибо техраф.

Kr

person moocan    schedule 20.07.2018

Поскольку документация (при необходимости) здесь не очень понятна, взгляните на эти строки в исходном коде модуля apt ansible.

Насколько я понимаю: вывод apt update полностью отбрасывается, если команда не завершается ошибкой, и в этом случае она заканчивается сообщением об ошибке.

т.е. вам лучше всего воспользоваться ответом Майкла Абабио.

person leopold.talirz    schedule 03.02.2021