2015-03-13 16 views
6

C'è un modo per accedere a un host/gruppo di vars all'interno di uno custom written module? Vorrei evitare di passare tutte le vars richieste come parametri del modulo.Ansible: accesso host/gruppo vars dall'interno del modulo personalizzato

Il mio modulo è scritto in Python e io uso il boilerplate. Ho controllato praticamente tutti Vars disponibili ma non vengono memorizzati da nessuna parte:

def main(): 
    pprint(dir()) 
    pprint(globals()) 
    pprint(locals()) 
    for name in vars().keys(): 
     print(name) 

Ora la mia unica speranza è che sono in qualche modo accessibili attraverso i utils modulo senza documenti.

Credo che non è possibile, poiché il modulo viene eseguito sul computer di destinazione e, probabilmente, i fatti/host/Vars del gruppo non vengono trasferite insieme con il modulo ...

Edit: Trovato il module utils ora ed è non sembra promettente.

risposta

1

penso che più o meno colpito il chiodo sulla testa con il vostro pensiero qui:

Credo che non è possibile, poiché il modulo viene eseguito sul computer di destinazione e, probabilmente, fatti/host/gruppo vars non vengono trasferiti insieme al modulo ...

Tuttavia, detto questo, se davvero ne hai bisogno, potrebbe esserci un modo leggermente disordinato di farlo. A partire da Ansible 1.8 è possibile impostare fact caching, che utilizza i redis per mettere in cache i fatti tra le esecuzioni dei giochi. Poiché redis è piuttosto facile da usare e dispone di clients for most popular programming languages, è possibile che il modulo richieda al server redis qualsiasi informazione necessaria. Non è esattamente il modo più pulito per farlo, ma potrebbe funzionare.

+0

È molto interessante! Al momento non è un'opzione perché richiederebbe un host redis aggiuntivo accessibile dalla casella locale e dalla casella remota. Questo è un po 'troppo di overhead. Ma potremmo implementarlo in quel modo più tardi quando avremo più automazione fatta con Ansible. Il caching dei fatti è qualcosa che probabilmente vorremmo comunque in seguito. Accetterò la tua risposta - mentre non è la soluzione ottimale sembra essere la migliore disponibile. – udondan

+0

È possibile installare semplicemente redis sul server ansible esistente. redis è molto leggero, quindi non è richiesto alcun server aggiuntivo. –

+0

Bene, qui è un po 'più complesso.Gestire più migliaia di host in 8 colonne con più vlans separati in ciascuno. Abbiamo appena iniziato con Ansible. In questo momento ciò comporterebbe troppi sforzi, ma è ovvio che occorrerà fare il caching dei fatti non così lontano in futuro e quindi questo dovrebbe essere molto facile da implementare. – udondan

3

Esiste un modo per accedere a un host/gruppo di vane da un modulo personalizzato ?

Non incorporato.

Si dovrà passare da soli in un modo o l'altro:

  • args modulo.
  • Serializzare su file system locale (con pickle o yaml.dump() o json o ...) e inviare il file.
  • qualsiasi altra idea innovativa che puoi trovare.

Purtroppo non si può semplicemente inviare più di interi/file groupvar ospitanti come-si-è perché si dovrà implementare l'algoritmo di risoluzione della visibilità/la precedenza variabile della ansible che è indefinito (non è il Zen philosophy of ansible definire tale piccole cose: P).

Problemi correlati