如果 set_fact 作用域为主机,我可以使用 'dummy' 主机作为全局变量映射吗?
If set_fact is scoped to a host, can I use 'dummy' host as a global variable map?
我定义了两组主机:wmaster
和wnodes
。每组都在自己的游戏中运行:
- hosts: wmaster
roles:
- all
- swarm-mode
vars:
- swarm_master: true
- hosts: wnodes
roles:
- all
- swarm-mode
我使用主机变量 (swarm_master
) 来定义某些角色的不同行为。
现在,我的第一个剧本执行一些初始化,我需要与节点共享数据。我所做的是在第一场比赛中使用 set_fact
,然后在第二场比赛中查找:
- set_fact:
docker_worker_token: "{{ hostvars[smarm_master_ip].foo }}"
我不喜欢使用 swarm_master_ip
。如何添加虚拟主机:global
例如地址 1.1.1.1
没有任何作用,仅用于保存全局 facts/variables?
如果您使用的是 Ansible 2,那么您可以在第一次游戏时使用 delegate_facts
:
- name: set fact on swarm nodes
set_fact: docker_worker_token="{{ some_var }}"
delegate_to: "{{ item }}"
delegate_facts: True
with_items: "{{ groups['wnodes'] }}"
这应该将 set_fact
任务委派给 wnodes
组中的每个主机,并将结果事实也委派给这些主机,而不是在当前被定位的清单主机上设置事实通过第一场比赛。
How about to add a dummy host: global
我实际上发现这个建议在某些情况下非常有用。
---
- hosts: my_server
tasks:
# create server_fact somehow
- add_host:
name: global
my_server_fact: "{{ server_fact }}"
- hosts: host_group
tasks:
- debug: var=hostvars['global']['my_server_fact']
我定义了两组主机:wmaster
和wnodes
。每组都在自己的游戏中运行:
- hosts: wmaster
roles:
- all
- swarm-mode
vars:
- swarm_master: true
- hosts: wnodes
roles:
- all
- swarm-mode
我使用主机变量 (swarm_master
) 来定义某些角色的不同行为。
现在,我的第一个剧本执行一些初始化,我需要与节点共享数据。我所做的是在第一场比赛中使用 set_fact
,然后在第二场比赛中查找:
- set_fact:
docker_worker_token: "{{ hostvars[smarm_master_ip].foo }}"
我不喜欢使用 swarm_master_ip
。如何添加虚拟主机:global
例如地址 1.1.1.1
没有任何作用,仅用于保存全局 facts/variables?
如果您使用的是 Ansible 2,那么您可以在第一次游戏时使用 delegate_facts
:
- name: set fact on swarm nodes
set_fact: docker_worker_token="{{ some_var }}"
delegate_to: "{{ item }}"
delegate_facts: True
with_items: "{{ groups['wnodes'] }}"
这应该将 set_fact
任务委派给 wnodes
组中的每个主机,并将结果事实也委派给这些主机,而不是在当前被定位的清单主机上设置事实通过第一场比赛。
How about to add a dummy host: global
我实际上发现这个建议在某些情况下非常有用。
---
- hosts: my_server
tasks:
# create server_fact somehow
- add_host:
name: global
my_server_fact: "{{ server_fact }}"
- hosts: host_group
tasks:
- debug: var=hostvars['global']['my_server_fact']