使用Ansible检查5000+台服务器的连接性并获取可连接和不可连接的主机列表

115次阅读
没有评论

问题描述

想要使用Ansible检查5000多台服务器在端口43上的连接性。他希望能够自动遍历所有服务器,并将可连接的主机保存在一个文件中,不可连接的主机保存在另一个文件中。

解决方案

以下解决方案基于使用Ansible来完成任务。请确保在执行操作前备份重要数据。

使用Ansible脚本检查连接性

你可以使用Ansible编写一个脚本来检查所有服务器的连接性,并将结果保存到两个不同的文件中。

  1. 首先,确保你的服务器列表已经添加到Ansible的主机清单文件中。

  2. 创建一个名为check_connectivity.yml的Ansible剧本文件,内容如下:

---
- hosts: all
  gather_facts: no
  tasks:
    - name: Check port 43 connectivity
      wait_for:
        timeout: 2
        port: 43
        host: "{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}"
      register: waitfor
      ignore_errors: true

    - name: Save results to files
      copy:
        content: |
          {% for host in groups['all'] %}
          {% if hostvars[host].waitfor.failed %}
          {{ hostvars[host].inventory_hostname }} {% endif %}
          {% endfor %}
        dest: /tmp/bad_hosts.txt
      delegate_to: localhost

    - copy:
        content: |
          {% for host in groups['all'] %}
          {% if not hostvars[host].waitfor.failed %}
          {{ hostvars[host].inventory_hostname }} {% endif %}
          {% endfor %}
        dest: /tmp/good_hosts.txt
      delegate_to: localhost

在上面的剧本中,我们使用了wait_for模块来检查服务器的端口43是否可连接。然后,根据连接性的结果,我们将可连接的主机和不可连接的主机分别保存到/tmp/good_hosts.txt/tmp/bad_hosts.txt文件中。

  1. 执行Ansible剧本:
ansible-playbook check_connectivity.yml

结果文件

执行完剧本后,你将会在服务器上的/tmp目录下找到两个文件:good_hosts.txtbad_hosts.txtgood_hosts.txt文件中包含可连接的主机列表,而bad_hosts.txt文件中包含不可连接的主机列表。

cat /tmp/good_hosts.txt
cat /tmp/bad_hosts.txt

以上操作将帮助你将连接性结果保存到指定的文件中,方便进一步分析和处理。

注意:在Ansible的剧本中,我们使用了wait_for模块来检查连接性,但这并不能保证每个主机都会按时响应。如果在执行过程中遇到超时问题,你可能需要根据需要调整超时时间。

希望这个解决方案能够帮助你成功检查服务器的连接性,并根据结果生成可连接和不可连接的主机列表。如有其他疑问,请随时提问。

正文完