Review Dictionary Merging in Ansible Projects
hash_behaviour = merge
setting in C2 Ansible inventory projects."Categories:
Projects:
c2platform/rws/ansible-gis
,
c2platform.wincore
,
c2platform.core
Configuring hash_behaviour
Ensure the hash_behaviour
in ansible.cfg
is set to merge
to enable
dictionary merging in your
Ansible inventory project.
Review variables
Variables in C2 Platform Ansible Roles like win_resources
and
linux_resources
can be complex dictionaries. Use this command to locate
win_resources in your project:
grep -HnA1 '^win_resources:' $(find group_vars -name "*.yml")
Example Output:
~/git/azure/rws/ansible-gis$ grep -HnA1 '^win_resources:' $(find group_vars -name "*.yml")
group_vars/fme/win.yml:2:win_resources:
group_vars/fme/win.yml-3- 2-fme:
--
group_vars/windows/main.yml:20:win_resources:
group_vars/windows/main.yml-21- 0-bootstrap:
--
group_vars/fme_engine/main.yml:12:win_resources:
group_vars/fme_engine/main.yml-13- fme_arcpy_path:
rws →
~/git/azure/rws/ansible-gis$
It shows three occurrences in three Ansible groups:
Group | Key |
---|---|
fme | 2-fme |
windows | 0-bootstrap |
fme_engine | fme_arcpy_path |
If a node is part of all three groups, Ansible will merge these lists, for example to a dictionary similar to:
win_resources:
2-fme:
- <list item>
- <list item>
0-bootstrap:
- <list item>
- <list item>
fme_arcpy_path:
- <list item>
C2 Ansible Roles will then typically first process these dictionaries using the
filter c2platform.core.groups2items
for simplified handling. This filter will
flatten and also sort alphabetically the list on the group name. The Ansible role
c2platform.wincore.win
also uses this filter. The result is shown below:
win_resources:
- group: 0-bootstrap
<list item>
- group: 0-bootstrap
<list item>
- group: 2-fme
<list item>
- group: fme_arcpy_path
<list item>
Tip:
Prefixing group names with numbers (e.g.,0-bootstrap
) organizes the execution
order in Ansible, prioritizing dependencies effectively.Review other “merging” dictionaries
Review all other variables that are dictionaries and that are or can be merged.
For example, C2 Platform product roles can include the c2platform.wincore.win
role and define their own “resources” variables. Search for _win_resources
. The result might look like below.
ostraaten@localhost:~/git/azure/ansible-gis$ grep -HnA1 '_win_resources:' $(find group_vars -name "*.yml")
group_vars/fme_core/main.yml:11:fme_flow_win_resources:
group_vars/fme_core/main.yml-12- core:
--
group_vars/fme_core/tomcat.yml:26:tomcat_win_resources:
group_vars/fme_core/tomcat.yml-27- tomcat:
ostraaten@localhost:~/git/azure/ansible-gis$
From this we can derive that the tomcat
role and fme_flow
include the
c2platform.wincore.win
role. Respectively the roles utilize this role though
the fme_flow_win_resources
and tomcat_win_resources
variables.
Additional Information
- See the guideline Managing Dictionary Merging in C2 Platform Ansible Projects.
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.