这个问题通常发生在使用Ansible差异过滤器比较2个主机的host_vars时。比如,在主机A的host_vars中有一个名为'param”的参数,而主机B的host_vars中也有一个名为'param”的参数。但是,当你尝试使用差异过滤器比较这两个参数时,你会发现只有一个参数被读取。这是因为Ansible在处理host_vars时会将它们转换为Python字典,并且不支持重复键。因此,只有最后一个同名键值对会被保留。
为了解决这个问题,我们可以使用Ansible的'combine”过滤器在比较之前将两个主机的host_vars合并为一个字典。以下是解决方法的代码示例:
- name: Compare host_vars with same keys
hosts: all
vars:
hostA_vars: "{{ hostvars['hostA'] }}"
hostB_vars: "{{ hostvars['hostB'] }}"
merged_vars: "{{ hostA_vars | combine(hostB_vars) }}"
tasks:
- name: Show the merged host_vars
debug:
var: merged_vars
在上面的示例中,'hostA_vars”和'hostB_vars”是对两个主机的host_vars的引用,而'merged_vars”是将它们合并的结果。我们可以在比较过滤器中使用'merged_vars”变量来比较两个主机的参数。