我已经定义了两组主机:do {
let realm = try Realm()
realm.beginWrite()
if let Settings = realm.objects(ModelClass).first {
Settings.settingsVal = settingsValue
realm.add(Settings, update: true)
}
try realm.commitWrite()
print("Success")
}
catch{
}
}
和wmaster
。每个小组都在其游戏中运行:
wnodes
我使用宿主变量(- hosts: wmaster
roles:
- all
- swarm-mode
vars:
- swarm_master: true
- hosts: wnodes
roles:
- all
- swarm-mode
)来定义某个角色的不同行为。
现在,我的第一个playbook执行了一些初始化,我需要与节点共享数据。我做的是在第一次播放中使用swarm_master
,然后在第二次播放中使用{
>
set_fact
我不喜欢使用- set_fact:
docker_worker_token: "{{ hostvars[smarm_master_ip].foo }}"
。如何添加虚拟主机:swarm_master_ip
,例如地址global
没有任何角色,仅用于持有全局事实/变量?
答案 0 :(得分:6)
如果你使用的是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
组中的每个主机,并且还将结果事实委托给这些主机,而不是在当前目标定位的库存主机上设置事实。第一次玩。
答案 1 :(得分:2)
如何添加虚拟主机:全局
我实际上发现这个建议在某些情况下非常有用。
---
- 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']