问题描述
想要使用Ansible检查5000多台服务器在端口43上的连接性。他希望能够自动遍历所有服务器,并将可连接的主机保存在一个文件中,不可连接的主机保存在另一个文件中。
解决方案
以下解决方案基于使用Ansible来完成任务。请确保在执行操作前备份重要数据。
使用Ansible脚本检查连接性
你可以使用Ansible编写一个脚本来检查所有服务器的连接性,并将结果保存到两个不同的文件中。
-
首先,确保你的服务器列表已经添加到Ansible的主机清单文件中。
-
创建一个名为
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
文件中。
- 执行Ansible剧本:
ansible-playbook check_connectivity.yml
结果文件
执行完剧本后,你将会在服务器上的/tmp
目录下找到两个文件:good_hosts.txt
和bad_hosts.txt
。good_hosts.txt
文件中包含可连接的主机列表,而bad_hosts.txt
文件中包含不可连接的主机列表。
cat /tmp/good_hosts.txt
cat /tmp/bad_hosts.txt
以上操作将帮助你将连接性结果保存到指定的文件中,方便进一步分析和处理。
注意:在Ansible的剧本中,我们使用了
wait_for
模块来检查连接性,但这并不能保证每个主机都会按时响应。如果在执行过程中遇到超时问题,你可能需要根据需要调整超时时间。
希望这个解决方案能够帮助你成功检查服务器的连接性,并根据结果生成可连接和不可连接的主机列表。如有其他疑问,请随时提问。
正文完