Ansible:获取远程主机名

Ansible:获取远程主机名

我制作了一个脚本,它将把主机名和 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在每台服务器上都有文件。
我可以建议下一个选择:

  1. 更改脚本以打印结果,这样您就可以运行所有输出ansible,然后解析该输出。

  2. 使用可靠的获取运行脚本后获取所有内容的模块a.txt,例如:ansible test -m fetch -a "src=a.txt dest=out/"

  3. 使用安塞布尔设置获取主机名和 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

相关内容