2015-12-27 18 views
7

Sto lavorando a un ruolo che deve solo raccogliere un singolo fatto.Ansible - Raccolta di fatti con filtro all'interno di un Playbook

Prestazioni è una preoccupazione e so che raccogliendo i fatti è tempo che richiede.

Sto cercando un modo per filtrare gather_facts all'interno di un playbook, questo mi permetterà di raccogliere solo i fatti richiesti.

Ciò è possibile utilizzando il modulo principale di configurazione:

ansible -m setup -a 'filter=ansible_hostname' my_host 

10.200.0.127 | success >> { 
    "ansible_facts": { 
     "ansible_hostname": "my_host" 
    }, 
    "changed": false 
} 

È possibile utilizzare questa funzionalità all'interno del playbook? Qualcosa come questo?

- hosts: all 
    sudo: yes 
    gather_facts: True 
    filter: "filter=ansible_*" 

PS: Il codice precedente genera un'eccezione sintassi.

EDIT 1: Se qualcuno ha bisogno di ottenere il nome dell'host c'è anche un'altra variabile utile inventory_hostname.

risposta

13

Sì, è possibile, ma non nel comportamento predefinito della raccolta di dati. Avendo impostato gather_facts su true chiama semplicemente lo setup module come primo compito del gioco. In questo modo non hai modo di parametrizzare la chiamata del modulo setup.

Tuttavia, è possibile disattivare il comportamento predefinito e configurare la chiamata autonomamente con il parametro del filtro.

- hosts: all 
    sudo: yes 
    gather_facts: False 
    tasks: 
    - setup: 
     filter: ansible_* 

Dal momento che si sta lavorando su un ruolo e non potrebbe desiderare di avere questa chiamata di installazione nel vostro ruolo, si potrebbe fare uso di pre_tasks.

- hosts: all 
    sudo: yes 
    gather_facts: False 
    pre_tasks: 
    - setup: 
     filter: ansible_* 
    roles: 
    - your_role_here 
1

Se tutto quello che ti interessa è il nome host di ogni host poi semplicemente fare qualcosa di simile dovrebbe fare quello che ti serve:

- hosts: all 
    gather_facts: false 
    tasks: 

    - name: Get hostname 
     command: /bin/hostname 
     register: my_hostname 

    - debug: var=my_hostname 

Se si tratta di qualche altro fatto che siete interessati a poi basta specificare il comando appropriato e fare riferimento al fatto tramite la variabile registrata.

3

Dopo questa domanda è stato chiesto e ha risposto, Ansible 2.1 added the gather_subset option al modulo di configurazione per cui il suo ora possibile utilizzare la !facter,!ohai,network sintassi descritta nella documentazione piuttosto che un filtro regex:

- hosts: all 
    sudo: yes 
    gather_facts: False 
    pre_tasks: 
    - setup: 
     gather_subset: !facter,!ohai,network 
    roles: 
    - your_role_here 
Problemi correlati