【发布时间】:2016-06-12 01:44:02
【问题描述】:
Ansible 1.9.2 / 1.9.4
CentOS 6.7
我正在尝试查找存储在清单文件中的给定主机名的 IP 地址。如果你看到我的剧本,我得到了我试图找到的主机名的 IP(参见第一个 -debug 部分)但那是我使用“with_items”并通过“{{ groups['zabbix_server'] }} “作为一个项目。
但现在我试图在不使用主机名[item]....方式的情况下找到IP,即直接使用groups['zabbix_server']方式。如何直接获取zabbix_server下hosts清单文件中列出的主机IP地址?即在 Ansible 中不使用“with_items”行/功能。
我在这里缺少什么来获得这些错误。我尝试了一些在线类似的博客/帖子,但没有帮助。使用 [].[] 或 ['something].['somethingelse'] 方式也没有帮助,为此我得到:
无法模板化 msg="IP is= {{ hostvars[groups['zabbix_server']].[ansible_default_ipv4.address] }}":模板化字符串时出现模板错误:预期的名称或编号
或 如果我用这种方式:
IP is= {{ hostvars[groups['zabbix_server']]['ansible_default_ipv4']['address'] }}"
我收到此错误:
... => 一个或多个未定义变量:'HostVars' 对象没有元素 ['zabbix.dev-white.projectname.jenkins]
库存文件hosts包含:
[zabbix_server]
zabbix.dev-white.projectname.jenkins
我的剧本文件包含:
- debug: msg="Zabbix server= {{ item }} and its IP is= {{ hostvars[item].ansible_default_ipv4.address }}"
with_items:
- "{{ groups['zabbix_server'] }}"
tags:
- lilupandut
- debug: msg="Zabbix server= {{ item }} and its IP is= {{ hostvars[groups['zabbix_server']][ansible_default_ipv4.address] }}"
with_items:
- "{{ groups['zabbix_server'] }}"
tags:
- lilupandut
#- debug: msg="Zabbix server= {{ item }} and its IP is= {{ groups['zabbix_server'][ansible_default_ipv4.address] }}"
# with_items:
# - "{{ groups['zabbix_server'] }}"
# tags:
# - lilupandut
如果我运行上面的剧本,我会得到以下输出(来自第一个 -debug 部分的有效输出)和一个错误(对于我试图使用直接获取 IP 地址的第二个 -debug 部分即不使用hostvars[item])。
$ ansible-playbook zabbix-setup.yml -i hosts -u koba --private-key ${DEPLOYER_KEY_FILE} -t lilupandut
PLAY [zabbix_server] **********************************************************
GATHERING FACTS ***************************************************************
ok: [zabbix.dev-white.projectname.jenkins]
TASK: [zabbix_install | debug msg="Zabbix server= {{ item }} and its IP is= {{ hostvars[item].ansible_default_ipv4.address }}"] ***
ok: [zabbix.dev-white.projectname.jenkins] => (item=zabbix.dev-white.projectname.jenkins) => {
"item": "zabbix.dev-white.projectname.jenkins",
"msg": "Zabbix server= zabbix.dev-white.projectname.jenkins and its IP is= 10.130.64.18"
}
TASK: [zabbix_install | debug msg="Zabbix server= {{ item }} and its IP is= {{ groups['zabbix_server'][ansible_default_ipv4.address] }}"] ***
fatal: [zabbix.dev-white.projectname.jenkins] => One or more undefined variables: 'HostVars' object has no element [zabbix.dev-white.projectname.jenkins]
FATAL: all hosts have already failed -- aborting
如果我 注释 中间的 -debug 部分并 un-comment 最后一个 -debug 语句,那么我将接近我正在寻找的“IP地址" 但还是出错了。
这次错误/输出如下:
projectname: [zabbix_install | debug msg="Zabbix server= {{ item }} and its IP is= {{ groups['zabbix_server'][ansible_default_ipv4.address] }}"] ***
fatal: [zabbix.dev-white.projectname.jenkins] => One or more undefined variables: 'list' object has no attribute '10.130.64.18'
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/confman/zabbix-setup.retry
zabbix.dev-white.projectname.jenkins : ok=2 changed=0 unreachable=1 failed=0
【问题讨论】:
标签: ip-address ansible ansible-playbook hostname inventory