# Use ansible to get all the servers with specific package

**URL:** <https://forum.ansible.com/t/use-ansible-to-get-all-the-servers-with-specific-package/35083>\
**Category:** Ansible Project\
**Tags:** awx\
**Created:** [April 29, 2021, 9:12pm UTC](https://forum.ansible.com/t/use-ansible-to-get-all-the-servers-with-specific-package/35083 "2021-04-29T21:12:01Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![foramgoram123](https://avatars.discourse-cdn.com/v4/letter/f/b487fb/32.png) [@foramgoram123](https://forum.ansible.com/u/foramgoram123)\
**Post date:** [April 29, 2021, 9:12pm UTC](https://forum.ansible.com/t/use-ansible-to-get-all-the-servers-with-specific-package/35083/1 "2021-04-29T21:12:01Z")

</div>

Is there way to find out all the servers that has specific package installed either via ansible command line or awx/tower similar to puppet pql query?

---

<div class="post-metadata">

**Author:** ![Komal\_Suthar](https://avatars.discourse-cdn.com/v4/letter/k/919ad9/32.png) [@Komal\_Suthar](https://forum.ansible.com/u/Komal_Suthar)\
**Post date:** [April 30, 2021, 1:43am UTC](https://forum.ansible.com/t/use-ansible-to-get-all-the-servers-with-specific-package/35083/2 "2021-04-30T01:43:27Z")

</div>

```auto
- name: Gather the package facts
  ansible.builtin.package_facts:
    manager: auto

- name: Print the package facts
  ansible.builtin.debug:
    var: ansible_facts.packages

- name: Check whether a package called foobar is installed
  ansible.builtin.debug:
    msg: "{{ ansible_facts.packages['foobar'] | length }} versions of foobar are installed!"
  when: "'foobar' in ansible_facts.packages"

```

```auto
This module of package_facts can help you I guess

```

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [April 30, 2021, 4:52am UTC](https://forum.ansible.com/t/use-ansible-to-get-all-the-servers-with-specific-package/35083/3 "2021-04-30T04:52:09Z")

</div>

Yes. Use ansible.builtin.package\_facts. As a hints, e.g. search Apache  
2.4.27 at srv1 and srv2

&nbsp;&nbsp;- hosts: srv1,srv2  
&nbsp;&nbsp;&nbsp;&nbsp;vars:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my\_pkg: apache24  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my\_ver: 2.4.27  
&nbsp;&nbsp;&nbsp;&nbsp;tasks:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- package\_facts:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- set\_fact:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my\_pkgs: "{{ ansible\_facts.packages|dict2items|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selectattr('key', 'eq', my\_pkg)|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map(attribute='value')|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flatten }}"

gives

ok: [srv1] =\>  
&nbsp;&nbsp;my\_pkgs:  
&nbsp;&nbsp;- arch: i386  
&nbsp;&nbsp;&nbsp;&nbsp;automatic: false  
&nbsp;&nbsp;&nbsp;&nbsp;category: www  
&nbsp;&nbsp;&nbsp;&nbsp;installed: '1501582995'  
&nbsp;&nbsp;&nbsp;&nbsp;name: apache24  
&nbsp;&nbsp;&nbsp;&nbsp;origin: unknown-repository  
&nbsp;&nbsp;&nbsp;&nbsp;port\_epoch: 0  
&nbsp;&nbsp;&nbsp;&nbsp;prefix: /usr/local  
&nbsp;&nbsp;&nbsp;&nbsp;revision: '0'  
&nbsp;&nbsp;&nbsp;&nbsp;source: pkg  
&nbsp;&nbsp;&nbsp;&nbsp;version: 2.4.27  
&nbsp;&nbsp;&nbsp;&nbsp;vital: false  
ok: [srv2] =\>  
&nbsp;&nbsp;my\_pkgs:  
&nbsp;&nbsp;- arch: amd64  
&nbsp;&nbsp;&nbsp;&nbsp;automatic: false  
&nbsp;&nbsp;&nbsp;&nbsp;category: www  
&nbsp;&nbsp;&nbsp;&nbsp;installed: '1574925090'  
&nbsp;&nbsp;&nbsp;&nbsp;name: apache24  
&nbsp;&nbsp;&nbsp;&nbsp;origin: FreeBSD  
&nbsp;&nbsp;&nbsp;&nbsp;port\_epoch: 0  
&nbsp;&nbsp;&nbsp;&nbsp;prefix: /usr/local  
&nbsp;&nbsp;&nbsp;&nbsp;revision: '0'  
&nbsp;&nbsp;&nbsp;&nbsp;source: pkg  
&nbsp;&nbsp;&nbsp;&nbsp;version: 2.4.41  
&nbsp;&nbsp;&nbsp;&nbsp;vital: false

Select the version and set the variable \*mypkg\_installed\*

&nbsp;&nbsp;&nbsp;&nbsp;- debug:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg: "{{ my\_pkg }} {{ my\_ver }} is installed."  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when: my\_pkgs|selectattr('version', 'eq', my\_ver)|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list\>length \> 0  
&nbsp;&nbsp;&nbsp;&nbsp;- set\_fact:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mypkg\_installed: "{{ my\_pkgs|selectattr('version', 'eq',  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my\_ver)| list|length \> 0 }}"

gives

&nbsp;&nbsp;ok: [srv1] =\>  
&nbsp;&nbsp;&nbsp;&nbsp;msg: apache24 2.4.27 is installed.  
&nbsp;&nbsp;skipping: [srv2]

Put the results into the dictionary \*mypkg\_hosts\*

&nbsp;&nbsp;&nbsp;&nbsp;- set\_fact:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mypkg\_hosts: "{{ dict(ansible\_play\_hosts\_all|zip(\_mypkg)) }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vars:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\_mypkg: "{{ ansible\_play\_hosts\_all|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map('extract', hostvars, 'mypkg\_installed')|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;run\_once: true

gives

&nbsp;&nbsp;mypkg\_hosts:  
&nbsp;&nbsp;&nbsp;&nbsp;srv1: true  
&nbsp;&nbsp;&nbsp;&nbsp;srv2: false
