2015-09-21 19 views
5

Sto cercando di far funzionare Ansible --limit e per farlo ho bisogno di informazioni sugli altri host, che sto memorizzando nella cache con fact_caching. Quale comando devo eseguire in modo che raccolga semplicemente tutti i fatti su tutti gli host e li memorizzi nella cache, senza eseguire alcuna attività? Qualcosa come lo setup module sarebbe perfetto se memorizzasse i fatti raccolti, ma sembra che non lo sia.Il modo più veloce per raccogliere i dati nella cache dei fatti

risposta

15

Ecco come mi piacerebbe risolvere il problema:

1.- Abilita fatti la raccolta sul vostro playbook (site.yml):

gather_facts: yes 

2.- Abilita facts caching su ansible.cfg:

2.1.- Opzione 1 - Utilizzare questo se si ha il tempo di installare Redis:

[defaults] 
gathering = smart 
fact_caching = redis 

# two hours timeout 
fact_caching_timeout = 7200 

2.2.- Opzione 2 - Usare questo per testare in questo momento è semplice, ma più lento di Redis:

[defaults] 
gathering = smart 
fact_caching = jsonfile 
fact_caching_connection = /tmp/facts_cache 

# two hours timeout 
fact_caching_timeout = 7200 

3.- Update o creare la cache fatti. Per fare ciò, creare un nuovo ruolo (aggiornamento della cache) con una sola attività: eseguire ping. Usiamo ping perché è il compito più semplice e veloce ansible così ci aiuterà aggiornare la cache veramente veloce:

- name: Pinging server to update facts cache 
    ping:    

Saluti,

+0

Avevo già fatto il resto, ma il comando ping era quello che stavo cercando. Inoltre, gather_facts è sì per impostazione predefinita. –

+0

Come posso creare un ping che ping tutti i server nel nostro inventario? –

+0

Facile: 1) set: "hosts: all" sul tuo sito.yml 2) set: "ruoli: cache-update" sul tuo sito.yml Quando eseguito eseguirà l'attività ping del tuo rol su tutti i tuoi ospiti. – alfredocambera

0

Il modo più veloce sarebbe quello di utilizzare Ansible fact caching introdotto nella versione 1.8. Richiede l'uso di un server redis per archiviare i fatti, ma ti consente di memorizzare i fatti tra le esecuzioni delle playbook. Come descrive la documentazione:

Immaginate, per esempio, un'infrastruttura molto grande con migliaia di host. La cache di fatti potrebbe essere configurata per l'esecuzione notturna, ma la configurazione di un piccolo gruppo di server potrebbe essere eseguita ad-hoc o periodicamente durante il giorno. Con il caching dei fatti abilitato, non sarebbe necessario "colpire" tutti i server per fare riferimento a variabili e informazioni su di essi.

Il problema con --limit è che limiterà tutti gli host che si ansible interagirà con, in modo che limiterà anche quello speciale gruppo ospite come all avrà un impatto. Se non è stato utilizzato --limit ma invece usato gruppi di host allora si potrebbe fare qualcosa di simile:

--- 
- hosts: all 
    tasks: [] 

- hosts: my_host_group 
    tasks: 
    - name: task1 
    ... 
    - name: task2 
    ... 

In questo esempio, il primo gioco costringerebbe la raccolta di fatti per tutti gli host che avete dato voi specificato hosts: all. La seconda riproduzione eseguirà quindi le attività desiderate sugli host nel gruppo my_host_group.

+0

Ho già abilitato il caching dei fatti (tramite json piuttosto che redis) e usiamo già gruppi di host. Usiamo anche --limitare a volte. Stavo cercando un modo per aggiornare la cache dei fatti senza eseguire l'intero playbook. –

2

Creazione di un nuovo manuale con una sola riga:

- hosts: all 

e la sua esecuzione raccoglie tutti i fatti, e se fact_caching è attiva, li memorizzerà nella cache per utilizzarli nei prossimi playbook con --limit.

Problemi correlati