---+ Ansible tips & tricks ---++ Ansible data types integer: 3211241 <br> boolean: true/false <br> float: 3.141592653 <br> string: "qwerty" <br> list: <br> - "item 1" <br> - "item 2" <br> dictionary: <br> key1: "value 1" <br> key2: "value 2" <br> ---++ Dump all variables <verbatim> --- - name: dump all hosts: all tasks: - name: Print some debug information vars: msg: | Module Variables ("vars"): -------------------------------- {{ vars | to_nice_json }} Environment Variables ("environment"): -------------------------------- {{ environment | to_nice_json }} GROUP NAMES Variables ("group_names"): -------------------------------- {{ group_names | to_nice_json }} GROUPS Variables ("groups"): -------------------------------- {{ groups | to_nice_json }} HOST Variables ("hostvars"): -------------------------------- {{ hostvars | to_nice_json }} debug: msg: "{{ msg.split('\n') }}" </verbatim> ---++ manipulating data ---+++ Extract subitems from list of dictionaries Use "{{ variable | map(attribute='key_name') | list }}" ---+++ Select items from list of dictionaries Use "{{ variable | selectattr('key_name', 'match', 'value') | list }}" Instead of match, you can also use search or regex. See: https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#testing-strings See the Jinja2 documentation for a list of available tests: https://jinja.palletsprojects.com/en/2.9.x/templates/#list-of-builtin-tests ---+++ Apply a filter to a list of items Use "{{ variable | map('<filter>', 'filter_option1', 'filter_option2') | list }}" For example: "{{ output.stdout_lines | map('regex_replace', '^(\S+)\s.*$', '\\1') | list }}" Be careful on the context in which you use this. In some cases you must use a single backslash (displaying a variable with debug for example): '\1' ---+++ Filter a list of strings Use "{{ variable | select('match', 'some string') | list }}" Instead of match, you can also use search or regex. See: https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#testing-strings ---+++ Sort list of dictionaries by subitem Use "{{ variable | sort(attribute='key_name') }}" ---+++ Searching a string in a when statement Use: when: my_string is match(pattern) Instead of match, you can also use search or regex. See: https://docs.ansible.com/ansible/latest/user_guide/playbooks_tests.html#testing-strings ---+++ Add a string to a string Use "{{ string1 + string2 }}" Or: "{{ string1 + ', ' + string2 }}" ---+++ Add item to list Use "{{ variable | default([]) + [item] }}" ---+++ Add item to dictionary Use "{{ variable | default({}) | combine({key_name: key_value}) }}" ---++ Replace multiple lines using replace module (lineinfile does not support multi-line regexp) Example: <verbatim> - name: Comment out hint zone "." in named.conf replace: path: "/etc/named.conf" regexp: '^(zone\s+"\."\s+IN\s+{[^\n]*)\n(\s*type\s+hint;[^\n]*)\n(\s*file\s+"named\.ca";[^\n]*)\n(};)' replace: '# \1\n# \2\n# \3\n# \4' </verbatim> -- %USERSIG{IvoVanGeel - 21 Sep 2021}%
Edit
|
Attach
|
Watch
|
P
rint version
|
H
istory
:
r19
|
r11
<
r10
<
r9
<
r8
|
B
acklinks
|
V
iew topic
|
More topic actions...
Topic revision: r9 - 17 Jan 2022
-
IvoVanGeel
Home
Site map
LANIS web
Main web
Sandbox web
TWiki web
Main Web
Users
Groups
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
View
Raw View
Print version
Find backlinks
History
More topic actions
Edit
Raw edit
Attach file or image
Edit topic preference settings
Set new parent
More topic actions
Account
Log In
Edit
Attach
Copyright © 2010-2019 by LANIS