Ansible 中带连字符的 GCE 主机名
GCE hostname with hyphen in Ansible
我将使用 Ansible 在 Google Compute Engine 中配置我的系统,并且该系统有一些手动创建的实例。其中一个实例被命名为测试模块。
因此我将这一行作为任务放在我的剧本中
something: {{ testing-module.private_ip }}
Ansible 结果我是
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
变量获得的所有信息。
我将使用 Ansible 在 Google Compute Engine 中配置我的系统,并且该系统有一些手动创建的实例。其中一个实例被命名为测试模块。
因此我将这一行作为任务放在我的剧本中
something: {{ testing-module.private_ip }}
Ansible 结果我是
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
变量获得的所有信息。