I had to test if all hosts were able to connect to a certain port on a certain server. Ansible was the perfect tool, but since not all machines have nc or nmap installed I had to make a workaround using Python. I will be checking if TCP port nagios.company.com:5666 is open.
the script, nagios.py (will be copied and executed on the remote host by ansible). This only works for TCP, changing SOCK_STREAM to SOCK_DGRAM will always return 0.
#!/usr/bin/python
import socket;
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex(('nagios.company.com',5666))
if result == 0:
print "OK"
else:
print "Not OK"
the playbook, nagios.yml
- name: Nagios connectivity test
hosts: all
tasks:
- name: script
script: /tmp/nagios.py
register: nagios
- debug: msg="{{ nagios.stdout }}"
the run command to filter the hosts that can't connect
ansible-playbook /tmp/nagios.yml | grep -B1 Not\ OK