1. inventory hosts file 中的server 變量會覆蓋group變量.python
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]].變量名. 這樣就可使用spa
Note 1 "passvar" 這個變量是register產生的, 相似於機器的facts, 會在playbook的整個生命週期中使用, hostvars[groups.masters[0]].passvar
debug
Note 2 可是vars產生的"xiama" 不會存在於下一個playbook中code
Note 3 能夠經過set_fact模塊來設置機器的fact, 而且永久生效.server
關於hostvars的結構, 能夠直接在playbook中使用hostvars下面的一級變量, 也能夠用hostvars.變量名, 或者字典hostvars['變量名'] 來引用. 不能直接使用二級變量中的變量.blog