Możesz użyć modułu Ansible wait_for , który sprawdza, czy określony port TCP jest otwarty.
Ponieważ w tym przypadku wszystkie porty powinny być już otwarte, możemy użyć minimalnego „nie”. ponownych prób, wystarczy na pokrycie problemów z siecią:
- name: Check all port numbers are accessible from current host
wait_for:
host: mywebserver.com
port: "{{ item }}"
state: started # Port should be open
delay: 0 # No wait before first check (sec)
timeout: 3 # Stop checking after timeout (sec)
ignore_errors: yes
with_items:
- 443
- 80
- 80443
Domyślnie Ansible będzie sprawdzać co sekundę (konfigurowalne w Ansible 2.3 za pomocą sleep
atrybutu), więc będzie to sprawdzać 3 razy na port.
Uruchom to w podręczniku z zapasami ponad 400 hostów - Ansible sprawdzi równolegle, że wszystkie hosty mogą uzyskać dostęp mywebserver.com
do tych portów.
Używamy ignore_errors: yes
tutaj, aby wszelkie błędy były oznaczone na czerwono, ale nie przerywały wykonywania.
Otwarte porty są zgłaszane jako ok
pozycje w danych wyjściowych, a zamknięte porty są zgłaszane jako failed
(musisz użyć -vv
flagi, ansible-playbook
aby zobaczyć to wyjście).
Dokładna regulacja wydajności
Jeśli potrzebujesz bardziej szczegółowych danych wyjściowych dla przypadków sukcesu i niepowodzenia, kod musi być bardziej złożony, dodając drugie zadanie:
wait_for
zadanie musi register
być zmienną
- drugie zadanie generuje dane wyjściowe przy użyciu
debug
warunku sukcesu / niepowodzenia (np. przy użyciu wyrażenia warunkowego Jinja2 )
- następnie musisz umieścić oba te zadania w pliku dołączonym (bez
with_items
pętli) i napisać główne zadanie playbook, które używa include
..., with_items
aby wywołać plik dołączany raz na port.
host: mywebserver.com
.