Cześć,

Mam przypadek, gdzie za pomocą Ansible'owych playbooków wrzucam na maszynki konfigi docker-compose, a następnie je odpalam (tutaj korzystam z Node Exporterów za pomocą których wystawiam metryki da każdej z maszyn).
Serwery mają między innymi interfejs sieciowy publiczny i vlanowy, defaultowo podczas mapowania portów, przykładowo "9100:9100" metryki są eksponowane do publicznego internetu, więc zdecydowanie nie jest to way to go.
Mapując porty, podając dodatkowo IP localhosta: "127.0.0.19100", usługa jest dostępna tylko na interfejsie loopbacka, nie jest eksponowana do internetu, jednak chciałbym, aby była dostępna z poziomu vlana z innych maszyn. Dla interfejsu lanowego mogę to osiągnąć poprzez mapowanie "VLAN_IP9100" gdzie VLAN_IP to prywatny IP maszyny dla właśnie tego interfejsu, wtedy jest dostępne tylko dla maszyn z tym interfejsem sieciowym.
Wiem, że można zrobić w legitny sposób, poprzez konfig firewall'a, ale niestety nie mogę sobie na to pozwolić (nie z własnej winy).
I teraz pojawia się pytanie: Jak za pomocą jednego uniwersalnego playbook'a mógłbym załatwić kwestię eksponowania metryk tylko wewnątrz prywatnej sieci?
Najlepsze rozwiązanie, które znalazłem na tę porę to korzystanie z faktów Ansible i templatkowanie do pliczku .env, gdzie umieszczam definicję zmiennej VLAN_IP, a następnie korzysta z niej docker-compose. Nie rozwiązuje to jednak wszystkich problemów - co w przypadku kiedy prywatne IP w sieci jest dynamiczne? Trzeba będzie jeszcze raz uruchomić playbook, aby się zaktualizowało co nie ma sensu.
Nie znalazłem dynamicznego resolvowania takiej konfiguracji przy uzyciu docker-compose, w jego definicji ani w .env nie można umieszczać wyrażeń które byłyby resolvowane, znalazłem za to Issue na githubie, które od dłuższego czasu wisi, inni też zmagają się z tym problemem.
Czy natknęliście się wcześniej na ten problem? Czy znacie lepsze rozwiązanie od wspomnianego rozwiązania z template'ami Ansible korzystającymi z faktów?