ansible - 如果 set_fact 的作用域为主机,我可以使用 'dummy' 主机作为全局变量映射吗?

标签 ansible

我定义了两组主机:wmasterwnodes。每个小组都在自己的游戏中运行:

- 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 没有任何作用,仅用于保存全局事实/变量?

最佳答案

如果您使用 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 任务委托(delegate)给 wnodes 组中的每个主机,并且还将结果事实委托(delegate)给这些主机,而不是在 list 上设置事实主机当前是第一个游戏的目标。

关于ansible - 如果 set_fact 的作用域为主机,我可以使用 'dummy' 主机作为全局变量映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39207616/

相关文章:

windows - 如何正确循环遍历 Ansible 中 block 内任务的文件?

docker - 如何使用ansible的docker connection-plugin?

ansible - 在 When 条件下转义正斜杠

linux - ansible playbook - 任务从未完成,没有结果并且仍在我的控制台上运行

ansible - 如何在 Ansible 中的不同库存之间共享 group_vars?

python - ansible 剧本 : the python mysqldb module is required 出错

ansible - 如何根据任务或任务集切换用户?

ansible - 如何使用 Ansible 获取物理网络接口(interface)列表

linux - 如何使用 Ansible ad-hoc 显示进程列表?

configuration - Ansible,字段参数具有无效值