Ansible 中带连字符的 GCE 主机名

GCE hostname with hyphen in Ansible

我将使用 Ansible 在 Google Compute Engine 中配置我的系统,并且该系统有一些手动创建的实例。其中一个实例被命名为测试模块。

因此我将这一行作为任务放在我的剧本中 something: {{ testing-module.private_ip }}

A​​nsible 结果我是 fatal: [foo] => Unable to look up a name or access an attribute in template string. Make sure your variable name does not contain invalid characters like '-'.

消息告诉我 Ansible playbook 中的变量名不能包含连字符。问题是如何引用testing-module的私有ip?

当你说 {{ foo.private_ip }} 时,foo 是 Ansible 变量的名称,而不是主机的名称。当 foo 对应于 Ansible 拥有清单的主机名称时,将定义 "private_ip" 等参数。

如果你想通过 Ansible 获取这个主机的 IP 地址,那么你需要强制 Ansible 清点那个主机,为此你需要一个任务来 运行 反对它。完成后,您将需要使用全局变量 hostvars 来获取实际信息。所以你会想要这样的东西:

- hosts: testing-module
  tasks:
    - name: Gather Facts
      debug: msg="Getting facts for {{ inventory_hostname_short }}"

    - name: Test Facts
      debug msg="IP address is {{ hostvars['testing-module']['private_ip'] }}"

- hosts: primary-server
  tasks:
    - name: Test Facts of testing-module
      debug msg="IP address is {{ hostvars['testing-module']['private_ip'] }}"

编辑:这是关于 hostvars 变量的 Ansible documentation 的 link。此外,当您第一次开始使用这样的变量时,一个方便的技巧是使用 debug 模块简单地显示所有内容:

- name: Display hostvars
  debug: var=hostvars

这将输出一个相当大的 JSON 结构,显示您可以通过 hostvars 变量获得的所有信息。