Hash merging not working for me (hash_behaviour = merge)

Hello,

I want to merge hashes of config files. My ansible.cfg includes this line:

hash_behaviour = merge

The ansible.cfg file is in the same directory as my playbook, in other words, the current directly where I’m cd’ed in when running ansible-playbook. I confirmed it’s being used by adding a syntax error which ansible then complains about. ANSIBLE_CONFIG is empty so it should be the first and last to check.

But my hash is not merged, but overridden.

In my example I have 3 tasks:

`

  • include_vars: /path/to/file/A

  • include_vars: /path/to/file/B

  • debug: var=test

`

Content of file A:
test:

Content of file B:
test: b: 1

When I run my playbook, this is the result:

`
TASK: [include_vars /path/to/file/A] ***
ok: [test1.local]

TASK: [include_vars /path/to/file/B] ***
ok: [test1.local]

TASK: [debug var=test] ******************************************
ok: [test1.local] => {
“test”: {
“b”: 1
}
}
`

Is this expected? How can I archive that the hash is merged and the resulting value is

test: { "a": 1, "b": 1 }

Thanks,
Daniel

For starters, can you please share what version of Ansible you are using?

(It very well could be that include_vars isn’t aware of hash merging, as it was a more recent addition and hash merging is used most frequently with different groups of inventory and such - I am not sure it makes sense here - but it may)

Thanks!

I’m running the most recent version available via homebrew, 1.7.1

Ok, I would file a ticket on this one, I think the include_vars just needs to call our usual combine_vars function.

Thanks!

–Michael

Thanks Michael,

I filed the ticket here: https://github.com/ansible/ansible/issues/9116

Best,
Daniel

After a quick look in the action module, I see those vars are actually returned as ansible_facts, so merging include_vars would mean merging ansible_facts AFAICS. (playbook/init.py)