Ansible tips & tricks

or things you should know before you start writing playbooks

substrings

Ansible does not have functions for dealing with substrings but because the foundation is python, you can actually use the python contructs [ : ], like for example:

- set_fact: mystring="abcdefg"

- debug: msg={{ mystring[1:3] }}


Output: abc

if() statements

Jinja2 has a {% if %} {% endif %} construction that is upported in most programming languages and you probably know this.
Unfortunately Ansible does not have this and you must use the ternary filter to build a if statement, for example:

- debug: msg=Is it Friday yet?  {{ today == 'Friday' | ternary('Yes weekend coming', 'not yet') }}

shell output from curl

When you use a shell script with the command/shell modules, you need a way of telling if the script was successfull. The command/shell modules always return Changed=true, so you can not use that.
The solution lies in the exit code in the script, which you can check like so:

#!/bin.bash

ls -l
exit 5

and the example playbook snippet:

- name Check script result
  command: mytest.sh
  register: myresult
  
- fail:
  when:  myresult.rc != 5

format numbers with leading 0's

- set_fact:  myvar=5

- debug: msg={{'%02d'| format( myvar ) }}

outputs: 05