combine_vars uses dict.update() to replace keys (cherry picked from commit5e03e322de
) * Add tests for merging and replacing vars from inventory sources (#73181) (cherry picked from commit9de2da8a7e
)
This commit is contained in:
parent
abc6658ac2
commit
08ba838a8e
7 changed files with 66 additions and 2 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- inventory - pass the vars dictionary to combine_vars instead of an individual key's value (https://github.com/ansible/ansible/issues/72975).
|
|
@ -248,7 +248,7 @@ class Group:
|
||||||
self.set_priority(int(value))
|
self.set_priority(int(value))
|
||||||
else:
|
else:
|
||||||
if key in self.vars and isinstance(self.vars[key], MutableMapping) and isinstance(value, Mapping):
|
if key in self.vars and isinstance(self.vars[key], MutableMapping) and isinstance(value, Mapping):
|
||||||
self.vars[key] = combine_vars(self.vars[key], value)
|
self.vars = combine_vars(self.vars, {key: value})
|
||||||
else:
|
else:
|
||||||
self.vars[key] = value
|
self.vars[key] = value
|
||||||
|
|
||||||
|
|
|
@ -143,7 +143,7 @@ class Host:
|
||||||
|
|
||||||
def set_variable(self, key, value):
|
def set_variable(self, key, value):
|
||||||
if key in self.vars and isinstance(self.vars[key], MutableMapping) and isinstance(value, Mapping):
|
if key in self.vars and isinstance(self.vars[key], MutableMapping) and isinstance(value, Mapping):
|
||||||
self.vars[key] = combine_vars(self.vars[key], value)
|
self.vars = combine_vars(self.vars, {key: value})
|
||||||
else:
|
else:
|
||||||
self.vars[key] = value
|
self.vars[key] = value
|
||||||
|
|
||||||
|
|
|
@ -6,3 +6,6 @@ JSON_ARG='{"test_hash":{"extra_args":"this is an extra arg"}}'
|
||||||
|
|
||||||
ANSIBLE_HASH_BEHAVIOUR=replace ansible-playbook test_hash.yml -i ../../inventory -v "$@" -e "${JSON_ARG}"
|
ANSIBLE_HASH_BEHAVIOUR=replace ansible-playbook test_hash.yml -i ../../inventory -v "$@" -e "${JSON_ARG}"
|
||||||
ANSIBLE_HASH_BEHAVIOUR=merge ansible-playbook test_hash.yml -i ../../inventory -v "$@" -e "${JSON_ARG}"
|
ANSIBLE_HASH_BEHAVIOUR=merge ansible-playbook test_hash.yml -i ../../inventory -v "$@" -e "${JSON_ARG}"
|
||||||
|
|
||||||
|
ANSIBLE_HASH_BEHAVIOUR=replace ansible-playbook test_inventory_hash.yml -i test_inv1.yml -i test_inv2.yml -v "$@"
|
||||||
|
ANSIBLE_HASH_BEHAVIOUR=merge ansible-playbook test_inventory_hash.yml -i test_inv1.yml -i test_inv2.yml -v "$@"
|
||||||
|
|
10
test/integration/targets/hash/test_inv1.yml
Normal file
10
test/integration/targets/hash/test_inv1.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
all:
|
||||||
|
hosts:
|
||||||
|
host1:
|
||||||
|
test_inventory_host_hash:
|
||||||
|
host_var1: "inventory 1"
|
||||||
|
host_var2: "inventory 1"
|
||||||
|
vars:
|
||||||
|
test_inventory_group_hash:
|
||||||
|
group_var1: "inventory 1"
|
||||||
|
group_var2: "inventory 1"
|
8
test/integration/targets/hash/test_inv2.yml
Normal file
8
test/integration/targets/hash/test_inv2.yml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
all:
|
||||||
|
hosts:
|
||||||
|
host1:
|
||||||
|
test_inventory_host_hash:
|
||||||
|
host_var1: "inventory 2"
|
||||||
|
vars:
|
||||||
|
test_inventory_group_hash:
|
||||||
|
group_var1: "inventory 2"
|
41
test/integration/targets/hash/test_inventory_hash.yml
Normal file
41
test/integration/targets/hash/test_inventory_hash.yml
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
---
|
||||||
|
- hosts: localhost
|
||||||
|
gather_facts: no
|
||||||
|
vars:
|
||||||
|
host_hash_merged: {'host_var1': 'inventory 2', 'host_var2': 'inventory 1'}
|
||||||
|
host_hash_replaced: {'host_var1': 'inventory 2'}
|
||||||
|
group_hash_merged: {'group_var1': 'inventory 2', 'group_var2': 'inventory 1'}
|
||||||
|
group_hash_replaced: {'group_var1': 'inventory 2'}
|
||||||
|
tasks:
|
||||||
|
|
||||||
|
- name: debug hash behaviour result
|
||||||
|
debug:
|
||||||
|
var: "{{ lookup('env', 'ANSIBLE_HASH_BEHAVIOUR') }}"
|
||||||
|
verbosity: 2
|
||||||
|
|
||||||
|
- name: assert hash behaviour is merge or replace
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- lookup('env', 'ANSIBLE_HASH_BEHAVIOUR') in ('merge', 'replace')
|
||||||
|
|
||||||
|
- name: debug test_inventory_host_hash
|
||||||
|
debug:
|
||||||
|
var: hostvars['host1']['test_inventory_host_hash']
|
||||||
|
verbosity: 2
|
||||||
|
|
||||||
|
- name: debug test_inventory_group_hash
|
||||||
|
debug:
|
||||||
|
var: test_inventory_group_hash
|
||||||
|
verbosity: 2
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- hostvars['host1']['test_inventory_host_hash'] == host_hash_replaced
|
||||||
|
- test_inventory_group_hash == group_hash_replaced
|
||||||
|
when: "lookup('env', 'ANSIBLE_HASH_BEHAVIOUR') == 'replace'"
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- hostvars['host1']['test_inventory_host_hash'] == host_hash_merged
|
||||||
|
- test_inventory_group_hash == group_hash_merged
|
||||||
|
when: "lookup('env', 'ANSIBLE_HASH_BEHAVIOUR') == 'merge'"
|
Loading…
Reference in a new issue