我制作了一个脚本,它将把主机名和 IP 地址放入一个文件中。我的脚本如下:
echo "*********************************************">>a.txt;
hostname>>a.txt;
/sbin/ifconfig>>a.txt
该脚本在本地运行良好。
我们的环境中有 1000 台服务器。我的目标是获取本地文件中所有服务器的主机名和IP地址(a.txt是我在其中执行ansible命令的文件)。为此,我使用 ansible。
我正在运行这个命令:
$ ansible test -m script -a ankush.sh
命令正在执行,但我可以在“a.txt”中看到本地主机名和本地系统的 IP 地址。我想要远程系统主机名和远程 IP 地址。
答案1
通过ansible
远程运行所有脚本,因此您将a.txt
在每台服务器上都有文件。
我可以建议下一个选择:
更改脚本以打印结果,这样您就可以运行所有输出
ansible
,然后解析该输出。使用可靠的获取运行脚本后获取所有内容的模块
a.txt
,例如:ansible test -m fetch -a "src=a.txt dest=out/"
使用安塞布尔设置获取主机名和 IP 地址的模块,例如:
ansible test -m setup -a 'filter=ansible_hostname'
以及更多详细信息http://docs.ansible.com/ansible/setup_module.html
答案2
也许您应该尝试使用 ansible 设置模块过滤 ansible 收集的事实,而无需编写任何脚本。
尝试以下操作
ansible test -m setup -a 'filter=ansible_all_ipv*_addresses' > ip_addrs.txt
ansible test -m setup -a 'filter=ansible_hostname' > hostnames.txt
这可能是您真正想要的,但可能会输出太多数据:
ansible test -m setup - 'gather_subset=network'
答案3
请尝试创建yaml
如下文件并运行 yaml 文件
- hosts: <Mention the inventory name>
tasks:
- name: use script module to execute local script on remote
script: /ankush.sh
register: scriptoutput
- name: local copy
local_action: copy content="{{ scriptoutput.stdout }}" dest=/home/ankush.txt
在脚本中仅提及命令,以便命令输出将重定向到ankush.txt