Is there any option to list groups in Ansible?

You can simply inspect the groups variable using the debug module:

ansible localhost -m debug -a 'var=groups.keys()'

The above is using groups.keys() to get just the list of groups. You could drop the .keys() part to see group membership as well:

ansible localhost -m debug -a 'var=groups'

Listing groups

Using tools built-in to Ansible + jq, this gives you something reasonably close:

ansible-inventory --list | jq "keys"

An advantage of this approach vs manually parsing inventory files is that it fully utilizes your ansible.cfg files (which can point to one or multiple inventory files, a directory of inventory files, etc...).

Example output on my machine (local_redis_all is a locally defined Ansible group):

[
  "_meta",
  "all",
  "local_redis_all",
]

If you prefer it in plain-text form, use an approach like ansible-inventory --list | jq -r "keys | .[]". It will give you an output like this:

_meta
all
local_redis_all

Listing hosts

This was not part of the original question, but including it here anyway since it might be useful to some of my readers. Use the following command for JSON output (note: the command actually outputs a JSON array for each group, I haven't yet figured out a way to flatten these with jq - suggestions are welcome):

ansible-inventory --list | jq ".[].hosts | map(.)?

This gives you an output similar to this:

[
  "redis-01",
  "redis-02",
  "redis-03"
]

Likewise, in raw text format (one host per line): ansible-inventory --list | jq -r ".[].hosts | .[]?"

This gives you an output like this:

redis-01
redis-02
redis-03

Tags:

Ansible