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.

midor
źródło
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 ).

Tensibai
źródło
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