如何使用 Ansible 获取已安装的 apt 包?
How can I get the installed apt packages with Ansible?
我试图在我的 Debian 7 (Wheezy), 8 (Jessie), and 9 (Stretch) machines. There are easy ways dealing with it using APT 或 dpkg
上列出所有已安装的软件包,但我找不到开箱即用的 Ansible 的正确方法。
有没有好的、流畅的方法来做到这一点?
对于RHEL machines I found this post:
Ansible 似乎没有提供任何支持此功能的模块。您必须使用 shell
或 command
.
- name: Get packages
shell: dpkg-query -f '${binary:Package}\n' -W
register: packages
- name: Print packages
debug:
msg: "{{ packages.stdout_lines }}"
从 Ansible 2.5 开始,您可以使用 package_facts 模块:
ansible.builtin.package_facts module – Package information as facts
- 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'
请注意,您需要 Debian 上的 ansible-apt 模块(由 bootstrap 友情提供)。
我试图在我的 Debian 7 (Wheezy), 8 (Jessie), and 9 (Stretch) machines. There are easy ways dealing with it using APT 或 dpkg
上列出所有已安装的软件包,但我找不到开箱即用的 Ansible 的正确方法。
有没有好的、流畅的方法来做到这一点?
对于RHEL machines I found this post:
Ansible 似乎没有提供任何支持此功能的模块。您必须使用 shell
或 command
.
- name: Get packages
shell: dpkg-query -f '${binary:Package}\n' -W
register: packages
- name: Print packages
debug:
msg: "{{ packages.stdout_lines }}"
从 Ansible 2.5 开始,您可以使用 package_facts 模块: ansible.builtin.package_facts module – Package information as facts
- 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'
请注意,您需要 Debian 上的 ansible-apt 模块(由 bootstrap 友情提供)。