Sometimes in an Ansible playbook, you'll want to condition running a task on whether or not the distribution is CentOS, RHEL, etc, or if it's something else. A very common example is when a package is named one thing on CentOS and something else on Debian.

I see a lot of Ansible playbooks (and have written a few myself) that will handle this by adding a "when:" to the task like this:

when: ansible_distribution == 'CentOS' or ansible_distribution == 'RedHat'

Is there a reason that that's so common instead of checking for os_family? Why do I not see this more often?:

when: ansible_os_family == 'RedHat'

Besides being more direct and concise, that also allows for other EL Linuxes like Scientific Linux and Rocky Linux without having to continually add to a list of all the possible EL derivatives. Is there something I'm missing?

  • That's not really an answerable question. People wrote their code that way because it met their needs. There are other ways to write it that might also meet their needs, but once they have something that works for them there's no reason for them to go looking for alternative solutions. If ansible_facts.os_family meets your needs, use it. If it doesn't, don't. Nov 7, 2021 at 20:31

2 Answers 2


Maybe try using lsb_release to derive the information, setting it as a fact, then look up the family from an Ansible hash map populated with the associations. Here is a mention of ansible_facts['os_family'] at https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#ansible-facts-os-family


Based on the link that mr. @mikequentel share


There is a list of distro or OS name that listed on ansible_distribution but not on ansible_os_family. So if your OS or distro listed on both you can choose what facts do you wanted to use.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.