2015-11-05 9 views
13

C'è with_fileglob che funziona da remoto in ansible?Esiste with_fileglob che funziona da remoto in ansible?

Principalmente desidero utilizzare qualcosa di simile con lo with_fileglob ma che circolerà globalmente sui file sul computer remoto/di destinazione, non su quello che sta eseguendo ansible.

risposta

15

Tutti i meccanismi di loop with_* sono le ricerche locali purtroppo, quindi non c'è un modo veramente pulito per farlo in Ansible. Le operazioni remote per progetto devono essere racchiuse in attività come dovrebbe occuparsi di connessioni e inventario ecc.

Quello che puoi fare è generare il tuo fileglob eseguendo il bombardamento verso l'host e quindi registrando l'output e il looping sulla parte stdout_lines dell'output.

Quindi un esempio banale può essere qualcosa di simile:

- name : get files in /path/ 
    shell : ls /path/* 
    register: path_files 

- name: fetch these back to the local Ansible host for backup purposes 
    fetch: 
    src : /path/"{{item}}" 
    dest: /path/to/backups/ 
    with_items: "{{ path_files.stdout_lines }}" 

Questa sarebbe la connessione all'host remoto (ad esempio, host.example.com), ottenere tutti i nomi dei file sotto /path/ e quindi copiarli all'host Ansible al percorso: /path/host.example.com/.

+0

In base alla tua esperienza, ci sono problemi con la fine delle linee tra Windows e Linux quando fai questo? Per esempio. alcuni 'with_items' sarebbero vuoti a copiare lo stdout da una' dir/b'? – Nick

2

Utilizzando ls /path/* non ha funzionato per me, ecco un esempio che utilizza find e qualche semplice regex per eliminare tutti nginx gestita host virtuali:

- name: get all managed vhosts 
    shell: find /etc/nginx/sites-enabled/ -type f -name \*-managed.conf 
    register: nginx_managed_virtual_hosts 

- name: delete all managed nginx virtual hosts 
    file: 
    path: "{{ item }}" 
    state: absent 
    with_items: "{{ nginx_managed_virtual_hosts.stdout_lines }}" 

Si potrebbe usarlo per trovare tutti i file con una specifica estensione o qualsiasi altro mix. Ad esempio, per ottenere semplicemente tutti i file in una directory: find /etc/nginx/sites-enabled/ -type f.

Problemi correlati