What's correct Jinja2 operator to do "less than" on a string?

I’m setting an Ansible fact like this:

set_fact: server_num={{ ansible_hostname[-2:] }}

server_num can take these values:

‘00’
‘01’
‘02’
‘03’
‘04’
ad infinitum

If I want a conditional that will evaluate to True for all server numbers less than a particular server number ‘n’ I’d like to be able to do this:

when: server_num < ‘n’

However, this throws the error "error while evaluating conditional: server_num < ‘n’

I could do this but clearly it doesn’t scale:

when: server_num == ‘00’ or server_num == ‘01’ or … or server_num == ‘n-1’

Is there a more succinct way to do this? I can’t seem to find a Jinja2 “less than” operator.

Thanks.

Hmm, this trivial playbook works for me:

  - hosts: localhost
    tasks:
    - debug: msg="Yep!"
      when: server_num < '03'

With '--extra-vars server_num=02', I get

  TASK: [debug msg="Yep!"]

Yea, it’s weird. Sometimes “<” works for me and sometimes it doesn’t. I couldn’t find this operator documented in the Jinja2 or Ansible docs and I don’t recall where I first learned it so I figured maybe it’s an invalid operator. I put a debug statement right before the line where I’m referencing server_num and it said it was set as I expected it to be but the statement still failed.

The less than operator is documented at http://jinja.pocoo.org/docs/dev/templates/#comparisons

Although, trying to use mathematical operations on string values isn’t exactly always straight forward.

You might get better results from the version_compare filter such as:

when: server_num|version_compare(‘100’, ‘lt’)

See http://docs.ansible.com/ansible/playbooks_filters.html#version-comparison-filters

I see. I agree that doing math on strings is somewhat questionable. I’ll check out version_compare. Thanks Matt.

I see. I agree that doing math on strings is somewhat questionable.

Well, strings can be sorted, and compared in that way. I wouldn't bet on
what adding 1 to a string would do, but comparisons seem legit.

http://jinja.pocoo.org/docs/dev/templates/#comparisons is where I found
the comparisons too, FWIW.

                                      -Josh (jbs@care.com)

This email is intended for the person(s) to whom it is addressed and may contain information that is PRIVILEGED or CONFIDENTIAL. Any unauthorized use, distribution, copying, or disclosure by any person other than the addressee(s) is strictly prohibited. If you have received this email in error, please notify the sender immediately by return email and delete the message and any attachments from your system.