Ansible获取清单主机组的主机名和IP
我正在尝试获取主机名和主机的IP地址,并将它们保存到一个文件中 我有这个解决办法Ansible获取清单主机组的主机名和IP,ansible,ansible-2.x,ansible-inventory,ansible-facts,Ansible,Ansible 2.x,Ansible Inventory,Ansible Facts,我正在尝试获取主机名和主机的IP地址,并将它们保存到一个文件中 我有这个解决办法 -名称:使用主机和IP地址创建文件。 时间:组中的资源清册\u主机名['local'] 线条填充: dest:{store_files_path}/{{ansible_date_time.date}/{{ansible_date_time.time}}/hosts.txt” 创建:是 行:“{{hostvars[inventory\u hostname].ansible\u hostname}:{{{hostvar
-名称:使用主机和IP地址创建文件。
时间:组中的资源清册\u主机名['local']
线条填充:
dest:{store_files_path}/{{ansible_date_time.date}/{{ansible_date_time.time}}/hosts.txt”
创建:是
行:“{{hostvars[inventory\u hostname].ansible\u hostname}:{{{hostvars[inventory\u hostname].ansible\u default\u ipv4.address}”
但问题是在我的hosts文件中,我有两个组,local
和Servers
。我只想获取服务器
,而不是本地
组,该组仅为本地主机
我试过下面这一行,但它不起作用,它给了我一个错误
行:{{{hostvars[groups['Servers'][0]].ansible_hostname}:{{{hostvars[groups['Servers'][0]].ansible_default_ipv4.address}”
我已经到处搜索过了,这就是我发现的,我应该怎么做呢?我会使用jinja模板来实现这一点:
#hosts_file.j2
{%用于组['Servers']%中的服务器}
{{hostvars[server]['ansible\u facts']['hostname']}:{{{hostvars[server]['ansible\u facts']['default\u ipv4']['address']}
{%endfor%}
-hosts:localhost
任务:
-名称:从模板创建主机文件
模板:
src:hosts_file.j2
dest:{store_files_path}/{{ansible_date_time.date}/{{ansible_date_time.time}}/hosts.txt
你把这件事弄得非常复杂
hostvars
来实现您想要的功能,它们主要是为您提供Ansible当前正在运行的主机的信息。Ansible为主持人收集的事实也是如此全部:
变量:
ansible_python_解释器:/usr/bin/python3
儿童:
本地:
主持人:
本地主机:
服务器:
主持人:
foo.example.org:
ansible_主机:172.17.0.2
还有剧本:
-主机:所有
收集事实:是的
任务:
-调试:
msg:{{ansible_hostname}}:{{{ansible_default_ipv4.address}
当:“‘服务器’在组_名称中”
这就产生了重述:
播放[全部]**********************************************************************************************************
任务[收集事实]**********************************************************************************************
确定:[本地主机]
ok:[foo.example.org]
任务[调试]********************************************************************************************************
正在跳过:[localhost]
确定:[foo.example.org]=>{
“msg”:“8088bc73d8cf:172.17.0.2”
}
重演**********************************************************************************************************
foo.example.org:ok=2 changed=0 unreachable=0 failed=0 skipped=0 Saved=0 ignored=0
localhost:ok=1已更改=0不可访问=0失败=0已跳过=1已获救=0已忽略=0
现在,如果你在自己的剧本中改编了这一点,你应该很乐意:
-名称:使用主机和IP地址创建文件。
线条填充:
dest:{store_files_path}/{{ansible_date_time.date}/{{ansible_date_time.time}}/hosts.txt”
创建:是
行:“{ansible\u hostname}:{{{ansible\u default\u ipv4.address}”
当:“‘服务器’在组_名称中”
委托给:localhost
嘿,我不知道templates/jinja templates,因此请您详细说明您的解决方案并将其作为一项任务。我是否应该将hosts_file.j2放在templates文件夹中?我在下面添加了任务调用。基本上,将第一个bloc粘贴到名为hosts_file.j2的文件中,该文件是您的模板。然后将第二组(任务)添加到您的剧本中。就这些。第二个块调用“模板”模块,该模块将把hosts_file.j2模板呈现到目标文件中。是的,templates文件夹是存储模板的好地方,ansible将在那里查找。好的,让我试试。面临一些问题。。错误:致命:[localhost]:失败!=>{“changed”:false,“msg”:“AnsibleUndefinedVariable:'ansible.vars.hostvars.HostVarsVars对象'没有属性'ansible_host'”}致命:[192.168.1.14]:失败!=>{“changed”:false,“msg”:“AnsibleUndefinedVariable:'ansible.vars.hostvars.HostVarsVars对象'没有属性'ansible_host'”}错误是什么?错误如下:“该任务包含一个带有未定义变量的选项。错误是:“ansible.vars.hostvars.HostVarsVars对象”没有属性“ansible\u hostname我猜您将hosts:all
更改为hosts:local
。这是正确的吗?我没有使用这样的,我使用的是:inventory\u hostname in groups['local']我有。您如何使用主机?写下你的整个剧本。但我想得到服务器的主机名。。。不是您在主机文件中分配的主机名。在我的hosts文件中,我刚刚放置了[group name],然后就是IP。这样看来也太复杂了。你试过了吗?你看过我回答中的摘要了吗foo.example.org
是我的主机文件中的名称,“msg”:“8088bc73d8cf:172.17.0.2”
是Ansible recap输出inventory\u hostname
确实会让我产生foo.example.org
,但这里我使用的是ansible\u hostname
,对于我的主机,8088bc73d8cf
。我尝试过了,但它会将输出保存到服务器,而不是本地主机,因为时间的原因……但这也是一种很好的方法,那么我该如何制作d