如果set_fact的范围限定为主机,我可以使用'dummy'主机作为全局变量映射吗?

时间:2016-08-29 13:33:48

标签: ansible ansible-playbook

我已经定义了两组主机: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没有任何角色,仅用于持有全局事实/变量?

2 个答案:

答案 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']