1. inventory hosts file 中的server 變量會覆蓋group變量.
hostvars: { "iaas_name": "test", "inventory_hostname": "hostname....", "inventory_hostname_short": "hostname....", "hostname....": { "passvar": { "changed": true, "cmd": [ "echo", "123" ], "delta": "0:00:00.004135", "end": "2016-05-10 13:02:51.363078", "invocation": { "module_args": "echo 123", "module_complex_args": {}, "module_name": "command" }, "rc": 0, "start": "2016-05-10 13:02:51.358943", "stderr": "", "stdout": "123", "stdout_lines": [ "123" ], "warnings": [] } }, }
"iaas_name" 這個變量是group中的值, 這個值在hostvars中的第一級變量中. 這個變量並沒有merge到"hostname...."中
2. hostvars中包含了說有執行過gather_facts的server的facts.
--- - name: test hosts: all gather_facts: no vars: xiama: "------------------------" tasks: - command: echo 123 register: passvar - name: test hosts: masters gather_facts: no tasks: - debug: var=hostvars - debug: var=groups['masters'][0]
在第二步中的debug中, hostvars包含了所有機器的facts, 可以在下面的steps中引用hostvars[groups.masters[0]].變量名. 這樣就可以使用
Note 1 "passvar" 這個變量是register產生的, 類似於機器的facts, 會在playbook的整個生命周期中使用, hostvars[groups.masters[0]].passvar
Note 2 但是vars產生的"xiama" 不會存在於下一個playbook中
Note 3 可以通過set_fact模塊來設置機器的fact, 並且永久生效.
關於hostvars的結構, 可以直接在playbook中使用hostvars下面的一級變量, 也可以用hostvars.變量名, 或者字典hostvars['變量名'] 來引用. 不能直接使用二級變量中的變量.
