2015-03-13 23 views
9

Voglio definire un playbook che stabilisce fatti sui miei host che possono essere usati in altri giochi. Il modulo set_fact afferma di essere in grado di fare questo ... http://docs.ansible.com/set_fact_module.html - comunque non funziona ... I fatti che definisco sono disponibili dopo la chiamata a set_fact entro una corsa del play-book - mi aspetterei allora di essere in grado di utilizzare ansible all -m setup e vedere il fatto definito da qualche parte all'interno dei fatti raccolti per ogni host ...utilizzando il modulo set_fact ansible per definire i fatti persistenti?

Ho provato a cercare nel codice il modulo set_fact - ma tutto quello che trovo è la stringa di documentazione ... https://github.com/ansible/ansible-modules-core/blob/19b328c4df2157b6c0191e9144236643ce2be890/utilities/logic/set_fact.py

+0

Buona domanda e non sapevo 'lavoro set_fact' _should_ persistente.Ho provato a trovare il codice vero e proprio, ho trovato un riferimento che "set_fact" è un plugin di azione ma non è stato in grado di trovare i plug-in di azione ora che tutto è diviso in 3 repository. Ho trovato [questo thread dalla mailing list] (http://grokbase.com/p/gg/ansible-devel/149rhwqtxy/persistent-set-fact) che menziona un parametro 'persistent' non documentato. Forse giocare con quello. – udondan

risposta

2

In primo luogo, il modulo set_fact imposta solo i dati disponibili durante una corsa. Per i fatti persistenti, avrete bisogno di uno:

--Static--

  • definirli in uno dei seguenti modi:
    • vars/
    • group_vars/
    • host_vars/

--Dynamic--

Quest'ultimo è quello che di solito scelto di fare, in quanto è molto semplice da configurare, ed i fatti sono sempre disponibili su tutti gli host, anche se si sta facendo qualcosa di simile:

  • ottenere tutti i fatti per tutti gli host collegati a un host nagios per generare i suoi file di configurazione.
+0

In effetti avrei dovuto tornare a questa domanda per aggiornare dopo aver appreso la risposta (la documentazione per il modulo set_fact è confusa con i neofiti - almeno mi ha confuso quando stavo iniziando con ansible). Le variabili definite tramite set_fact sopravvivono solo tra le riproduzioni _con la stessa cartella di gioco_. – Ben

+0

concordato. I documenti possono essere piuttosto confusi all'inizio. – senorsmile

+1

set_fact può ora essere utilizzato per memorizzare le variabili e persistere tra le esecuzioni. Vedi http://docs.ansible.com/ansible/latest/playbooks_variables.html#fact-caching e http://docs.ansible.com/ansible/latest/set_fact_module.html – Petro026

1

Quale versione di Ansible stai usando? A partire dalla versione 1.8, c'è un fact caching capability integrato, ma è disabilitato di default. Dovresti abilitarlo all'interno del tuo file ansible.cfg, e devi anche avere un server redis in esecuzione poiché è ciò che effettivamente memorizza nella cache i fatti.

+0

Sto usando ansible 1.8.4. Ho capito la documentazione del modulo set_fact in modo abbastanza diverso ... Ho pensato che stava facendo qualcosa di più simile alla creazione di uno stato sull'host che eseguiva l'attività per memorizzare un valore di fatto - qualcosa di simile alla creazione o all'aggiornamento di un file in/etc/facts .d/che catturerebbe i parametri passati a set_fact. Questa sembra la naturale interpretazione di "Queste variabili sopravvivranno tra i giochi" per me ... – Ben

+0

In realtà non sto cercando di usare i fatti dai nodi remoti - ma piuttosto sto cercando di catturare e congelare un pezzo di stato un host (la sua chiave pubblica host ssh) in modo che possa rilevare se questo cambia e se lo è, voglio generare un errore. Il mio obiettivo è definire un flusso di lavoro in modo da poter raccogliere facilmente tutte le chiavi pubbliche dell'host ssh dai nodi aggiunti alla mia infrastruttura, verificare e firmare su di esse, e quindi rilevare facilmente se qualcuno di loro cambia dal valore approvato centralmente – Ben

+0

un po 'diverso - (1) ottiene il valore della copia validata della chiave host pubblica dell'host remoto per ansible_hostname dalla control machine in una variabile usando il meccanismo' lookup 'del file (2) ottiene il valore di/etc/ssh/ssh_host_rsa_key .pub using shell: cat e register (3) genera un errore in caso di mancata corrispondenza a meno che non venga esplicitamente ignorato Grazie per l'aiuto. Gradirei qualsiasi suggerimento se questo suona come un approccio cattivo. – Ben

Problemi correlati