====== Ansible - best practices ======
===== Naming things =====
* Variable names must contain only lowercase alphanumeric characters and the underscore ''_'' character. Variable names must also start with either an alphabetic or underscore ''_'' character.
* Problematic Code
---
- name: Example playbook
hosts: localhost
vars:
CamelCase: true # <- Contains a mix of lowercase and uppercase characters.
ALL_CAPS: bar # <- Contains only uppercase characters.
v@r!able: baz # <- Contains special characters.
hosts: [] # <- hosts is an Ansible reserved name
role_name: boo # <-- invalid as being Ansible special magic variable
* Correct Code
---
- name: Example playbook
hosts: localhost
vars:
lowercase: true # <- Contains only lowercase characters.
no_caps: bar # <- Does not contains uppercase characters.
variable: baz # <- Does not contain special characters.
my_hosts: [] # <- Does not use a reserved names.
my_role_name: boo
* Role names must contain only lowercase alphanumeric characters and the underscore ''_'' character. Role names must also start with an alphabetic character.
==== YAML and Jinja2 Syntax ====
* Indent at two spaces
* Indent list contents beyond the list definition
example_list:
- example_element_1
- example_element_2
- example_element_3
- example_element_4
* Split long expressions into multiple lines. Always use the sign ''>-'' instead of ''>'' unless you are absolutely sure the trailing newline is not significant. The sign ''>'' adds a newline character to the last line, effectively turning non nunc. at the end of the example string above into ''"non nunc.\n"'', and ''>-'' doesn’t add the newline character. It is really easy to introduce an error by using ''>'' and silently add a newline to a variable, like a filename, which leads to strange, hard to decipher errors.
- name: Call a very long command line
ansible.builtin.command: >-
echo Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Maecenas mollis, ante in cursus congue, mauris orci tincidunt nulla,
non gravida tortor mi non nunc.
* Use ''true'' and ''false'' for boolean values in playbooks. Do not use the Ansible-specific ''yes'' and ''no'' as boolean values and also avoid the use of the Python-style ''True'' and ''False''.
* Use double quotes for YAML strings with the exception of Jinja2 strings which will use single quotes.