【问题标题】:ansible variable across hosts in one playbook一个剧本中跨主机的ansible变量
【发布时间】:2020-04-03 07:19:35
【问题描述】:

是否可以将值存储在变量中并跨多个主机使用。我发现它应该与 set_fact 一起使用,所以我这样尝试。但它不起作用。

- hosts: db
     remote_user: root
     tasks:

     - name: set fact
       set_fact:
         zone_id: "app"
         subnet_id: 28
        when:  host_ip.find("10.1.30") != -1

        ....
 - hosts: ns01
     remote_user: root
     tasks:

    - name:
      debug:
        var: "{{ hostvars['db']['zone_id'] }}"

    ....

但我收到以下错误“该任务包含一个带有未定义变量的选项。错误是:“hostvars['db']”未定义”。

谢谢

【问题讨论】:

  • 如果你想使用全局变量,你可以在包含变量文件中创建一个变量文件,并在前置任务中使用 include_vars 并使用它。
  • 我不想要全局变量。变量 zone_id 中的值基于 IP 地址。我有多个条件和不同的 ip 子网我有不同的 zone_id 基于用户输入。而且我需要在其他主机中使用变量 zone_id 的内容。

标签: ansible


【解决方案1】:

set_fact 用于从主机中提取信息并保存以备后用。它用于随时间变化的信息。

它将信息保存为常规变量,因此您将能够以{{ zone_id }} 访问它。

主机变量用于存储有关每个主机的“静态”信息,这些信息可能在主机之间有所不同,因此如果此区域没有更改,请将其放入主机变量中。如果需要在运行时检查,请使用 set_fact

【讨论】:

  • 感谢您的回答。是的,我能够以 {{ zone_id }} 的身份访问它,但只能在同一主机上。我有多个主机的剧本,我需要从主机 ns.Fron ns 主机访问变量我得到未定义的变量错误。
猜你喜欢
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多