Use setup module filter parameter to get results based on values of a fact

Hi,

Is it possible to use the setup module along with the filter parameter to return something based on the value of fact?

For example, I want to quickly get a list of all my machines in ansible that are VMWare based using an ad-hoc command. I can run the following to get the vendor;

ansible -i inventory all -m setup -a “filter=ansible_system_vendor” -o
10.0.XXX.XXX | success >> {“ansible_facts”: {“ansible_system_vendor”: “VMware, Inc.”}, “changed”: false}
10.0.XXX.XXX | success >> {“ansible_facts”: {“ansible_system_vendor”: “VMware, Inc.”}, “changed”: false}

10.0.XXX.XXX | success >> {“ansible_facts”: {“ansible_system_vendor”: “HP”}, “changed”: false}

And I can pipe the result though grep to get what I need, but is there any way to quickly list all hosts by the value of a certain fact?

Thanks.

This may be useful, untested quick sketch though…

Take a look at the group_by parameter to select all hosts where a fact has a certain value.

  • hosts: all
    tasks:

  • group_by: key=ansible_system_vendor_{{ ansible_system_vendor }}

  • hosts: ansible_system_vendor_HP
    tasks:

  • debug: msg=“{{ inventory_hostname }} is an HP”

Thanks for the reply.

Yep, I’ve already been doing that in a playbook, I just wondered if it was possible to do using an adhoc command. That way I can quickly run a command to say, list all machines running CentOS or all machines that are HP or based on any other fact.

I guess the answer is that the filter parameter of the setup doesn’t currently allow for more than matching on a fact name.

It’s not possible to do this with /usr/bin/ansible currently.