Как получить установленные пакеты apt с помощью Ansible?

Я пытаюсь перечислить все установленные пакеты на моих машинах Debian 7/8/9. Есть простые способы справиться с этим с помощью apt или dpkg, но я не смог найти подходящего способа сделать это с помощью ansible из коробки.

Есть ли хороший и плавный способ сделать это?

Для машин RHEL я нашел это сообщение: Как получить установленный yum пакеты с Ansible?


person nicowde    schedule 01.08.2017    source источник


Ответы (2)


Не похоже, что Ansible предоставляет какие-либо модули, которые бы это поддерживали. Вам придется использовать shell или command.

- name: Get packages
  shell: dpkg-query -f '${binary:Package}\n' -W
  register: packages

- name: Print packages
  debug:
    msg: "{{ packages.stdout_lines }}" 
person kfreezy    schedule 01.08.2017
comment
спасибо за вашу идею использовать dpkg-query, никогда об этом не думал. - person nicowde; 02.08.2017

Начиная с версии 2.5 вы можете использовать модуль package_facts: https://docs.ansible.com/ansible/latest/modules/package_facts_module.html

- name: Gather package facts
  package_facts:
    manager: auto

- name: Debug if package is present
  debug:
    msg: 'yes, mypackage is present'
  when: '"mypackage" in ansible_facts.packages'

- name: Debug if package is absent
  debug:
    msg: 'no, mypackage is absent'
  when: '"mypackage" not in ansible_facts.packages'

заметьте, для этого вам понадобится модуль ansible-apt в Debian (который любезно предоставлен https://galaxy.ansible.com/robertdebock/bootstrap).

person vkersten    schedule 31.10.2019