Trouble with basic conditional

Hi there, slowly learning ansible here and having issues with a simple conditional. I want to run something against all hosts in group “webservers” that end in “01”. The following doesnt seem to match any hosts (they get skipped), but looks right to me. Any ideas?

`

  • hosts: webservers
    tasks:
  • name: check cluster status
    command: ‘echo $hostname’
    when: inventory_hostname == “*01”
    `

Thanks

There are a number of ways to do this.

  1. Set “hosts” to “web*01” or whatever the pattern is to target only those servers in the play
  2. In your when statement use ‘inventory_hostname.endswith(“01”)’
  3. inventory_hostname|search(‘01$’)

Those are just a few of the many ways.

Thanks Matt, inventory_hostname.endswith did the job perfectly. Out of interest is there a way of performing an AND in the hosts declaration i.e member of webservers group AND hostname ends in 01. This would prevent unnecessarily gathering facts on servers that we arent interested in. The documentation for patterns seems to suggest that you can perform OR but no mention of AND. Apologies for the basic questions, I’m currently reading up on this stuff! Thanks

In your case I would recommend reading and playing around with this

https://docs.ansible.com/ansible/intro_patterns.html

Without having tested it you should be able to achieve what you asked for using this:

hosts: *01,&webserver