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
.host: x
nie jest wymagane. Właśnie ponownie przetestowałem z Ansible 2.3.1 i domyślniehost
atrybutwait_for
zadań jest przetwarzany na bieżącym serwerze z zapasów.hosts
atrybutem.AFAIK nie ma wbudowanego modułu do tego celu, ale możesz użyć
shell
+nc
:źródło
-G 1
nie mogę znaleźć na stronach podręcznika?Do tego samego możesz użyć modułu wait_for
przykład cytowany z dokumentacji:
źródło
Do takich zadań używamy naszego narzędzia dda-serverspec ( https://github.com/DomainDrivenArchitecture/dda-serverspec-crate ). Możesz określić swoje oczekiwania
{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]}
i przetestuj te oczekiwania w stosunku do localhost lub zdalnego przez ssh. W przypadku testów zdalnych musisz zdefiniować cele:
{:existing [{:node-name "test-vm1"
:node-ip "35.157.19.218"}
{:node-name "test-vm2" :node-ip "18.194.113.138"}] :provisioning-user {:login "ubuntu"}}
Możesz uruchomić test przez
java -jar dda-serverspec.jar --targets targets.edn serverspec.edn
źródło