Jak deterministycznie i odtwarzalnie przypisywać rosnące numery portów w Ansible?


12

Jestem nowym użytkownikiem Ansible, ale muszę utrzymywać zestaw podręczników, które odpowiadają usługom konfigurowanym w danym środowisku. Należy im przypisać port, certyfikaty itp. W rezultacie powstaje wiele plików z listami o zasadniczo zawsze takich samych nazwach i przypisaniem do nich.

W wielu przypadkach myślę, że mogę z łatwością ponownie użyć nazwy usługi jako zmiennej, ale podczas mapowania na adresy IP, porty lub inne identyfikatory numeryczne nie znalazłem jeszcze sposobu na deterministyczne przypisanie im różnych liczb w sposób, który jest odtwarzalny i najlepiej pozostaje to samo nawet po dodaniu nowych usług. Rozważałem użycie bazy danych SQLite do przechowywania usług i generowania wartości na podstawie ich identyfikatorów, ale nie mam pojęcia, jak je zintegrować z Ansible.

Zakładam, że przypisywanie rosnących numerów portów nie jest czymś zupełnie nowym; jest to coś, do czego wielu administratorów na co dzień, więc musi być jakiś sposób, aby to zrobić.

Edycja : dodajemy bezpośrednio numery portów itp. W group_vars/all.ymlnastępujący sposób:

ports:
    service1:1024
    service2:1025
    service3:1026

Inwentaryzacja jest generowana automatycznie, ponieważ tworzymy dodatkowe więzienia (BSD) i zależy od ról, które zostaną wykonane.


2
Ponieważ prawdopodobnie i tak musisz dodać usługę do wykazu, co powstrzymuje cię przed ręcznym dodaniem określonego numeru portu? Lub jeśli Twój ekwipunek jest generowany automatycznie, prawdopodobnie powinieneś rozwiązać problem na poziomie generowania ekwipunku
— SztupY

Czy możesz podać jakieś fragmenty Ansible? Nie jest jasne, czy używasz group_varslub dodajesz zmienne bezpośrednio do plików ekwipunku. Nie jest również jasne, w jaki sposób tworzony jest ekwipunek.
— Woodland Hunter

Czy zastanawiałeś się nad użyciem narzędzia do wyszukiwania usług, takiego jak konsul HashiCorp?
— Dyrektor Techniczny Foghorn,

Odpowiedzi:


5

Oświadczenie: Nie używam Ansible.

Chciałbym użyć losowej liczby „przewidywalnej”. Według dokumentu Ansible możesz uruchomić generator liczb losowych:

Począwszy od wersji 2.3 programu Ansible, możliwe jest również zainicjowanie generatora liczb losowych z nasion. W ten sposób możesz tworzyć liczby losowe, ale idempotentne:

„{{59 | random (seed = nazwa_hosta_wynumeru)}} * * * * root / script / from / cron”

Więc w twoim przypadku dla numeru portu (zakładam nieuprzywilejowany) wybrałbym zmienną z czymś takim jak:

port="{{ 32767 |random(start=1024,seed=service_name) }}"

Maks. 32767, aby uniknąć kolizji z dowolnym portem zainicjowanym przez klienta ( powód - patrz efemeryczny port ).


To dobry pomysł, który rozważałem, ale sprawia, że ​​coraz większa część jest niemożliwa. Posiadanie pewnych usług, które są logicznie powiązane w określonym zakresie portów, jest prawdopodobnie bardzo pożądane.
— midor
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.