发布于 2019-09-02 03:50:38
问:是否有可能在实例之间共享变量?
答:是的。字典主机保存变量。引用使用魔术变量访问有关其他主机的信息
hostvars允许您访问另一个主机的变量,包括已收集到的有关该主机的事实。您可以在剧本中的任何一点访问主机变量。..。
{{ hostvars['test.example.com']['ansible_facts']['distribution'] }}在禁用“事实缓存”的情况下,为了在Ansible播放簿之间共享信息,可以将所有主机存储在一个文件中。例如,使用此模板
$ cat my_hostvars.json.j2
my_hostvars_all:
{% for my_host in ansible_play_hosts_all %}
{{ my_host }}:
{{ hostvars[my_host]|to_nice_json }}
{% endfor %}下面的剧本将所有主机的主机存储在字典my_hostvars_all中,并将其放入本地主机上的{ inventory_dir }}/my_hostvars.json文件中。
- hosts: test_jails
tasks:
- set_fact:
test_var: "test_var_in_{{ inventory_hostname }}"
- template:
src: my_hostvars.json.j2
dest: "{{ inventory_dir }}/my_hostvars.json"
delegate_to: localhost
run_once: true这本词典可以列入下一本剧本。例如,下面的剧本
- hosts: test_jails
tasks:
- include_vars: my_hostvars.json
- set_fact:
my_hostvars: "{{ my_hostvars_all[inventory_hostname] }}"
- debug:
var: my_hostvars.test_var给出
ok: [test_01] => {
"my_hostvars.test_var": "test_var_in_test_01"
}
ok: [test_02] => {
"my_hostvars.test_var": "test_var_in_test_02"
}
ok: [test_03] => {
"my_hostvars.test_var": "test_var_in_test_03"
}https://devops.stackexchange.com/questions/9068
复制相似问题