Come determinare e assegnare in modo riproducibile numeri di porta crescenti in Ansible?


12

Sono nuovo di Ansible, ma devo mantenere una serie di libri di gioco, che corrispondono ai servizi da configurare in un determinato ambiente. Devono essere assegnati una porta, certificati, ecc. Ciò si traduce in molti file con elenchi di essenzialmente sempre gli stessi nomi e un'assegnazione a loro.

In molti casi penso di poter facilmente riutilizzare il nome_servizio come variabile, ma durante la mappatura su IP, porte o altri identificatori numerici non ho ancora trovato un modo per assegnare in modo deterministico loro numeri diversi in un modo riproducibile, e preferibilmente rimane il lo stesso anche quando vengono aggiunti nuovi servizi. Ho preso in considerazione l'utilizzo di un database SQLite per archiviare i servizi e generare i valori dai loro ID, ma non ho idea di come integrarlo con Ansible.

Presumo che l'assegnazione di un numero crescente di porte non sia qualcosa di completamente nuovo; è qualcosa che molti amministratori di sistema devono fare quotidianamente, quindi ci deve essere un modo per farlo.

Modifica : aggiungiamo direttamente i numeri di porta ecc. In group_vars/all.ymlquesto modo:

ports:
    service1:1024
    service2:1025
    service3:1026

L'inventario viene generato automaticamente, poiché creiamo jail aggiuntive (BSD) e dipende dai ruoli che verranno eseguiti.


2
Dal momento che probabilmente devi aggiungere il servizio all'inventario, cosa ti impedisce di aggiungere manualmente un numero di porta specifico lì? Oppure, se il tuo inventario viene generato automaticamente, probabilmente dovresti risolvere il problema a livello di generazione dell'inventario
SztupY

Per favore, includi alcuni frammenti di Ansible? Non è chiaro se si stanno utilizzando group_varso aggiungendo variabili direttamente nei file di inventario. Inoltre, non è chiaro come viene generato il tuo inventario.
Woodland Hunter

Hai mai pensato di utilizzare uno strumento di scoperta di servizi come il Console di HashiCorp?
Foghorn CTO

Risposte:


5

Disclaimer: non sto usando Ansible.

Quello che vorrei fare è usare un numero "prevedibile" casuale. Secondo Ansible doc puoi seminare il generatore di numeri casuali:

A partire dalla versione 2.3 di Ansible, è anche possibile inizializzare il generatore di numeri casuali da un seed. In questo modo, puoi creare numeri casuali ma idempotenti:

"{{59 | random (seed = nome_inventario)}} * * * * root / script / from / cron"

Quindi nel tuo caso per un numero di porta (presumo non privilegiato) sceglierei una variabile con qualcosa del tipo:

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

Max a 32767 per evitare lo scontro con qualsiasi porta avviata dal client (vedi la porta effimera per il motivo).


Questa è una buona idea, che ho considerato, ma rende impossibile la parte crescente. Avere determinati servizi che sono logicamente correlati in un determinato intervallo di porte è probabilmente molto desiderabile.
Midor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.