2016-01-11 7 views
17

I file generati con ansible su host remoto e dopo questa generazione, vorrei leggere questi file in un'altra operazione.Ansible: lettura file remoto

Non riesco a trovare nessun modulo per leggere il file remoto con ansible (la ricerca sembra solo sull'host locale).

Conosci un modulo come questo?

Grazie

EDIT:

Qui è il mio caso d'uso:

ho generare chiavi SSH e lo aggiungo alla GitHub. Questi tasti sono la creazione da un oggetto in file var così ho ciclo come questo per generare esso:

tasks: 
    - name: Create ssh key 
    user: 
     name: "{{sshConfigFile.user}}" 
     generate_ssh_key: yes 
     ssh_key_file: ".ssh/{{item.value.file}}" 
     state: present 
    with_dict: "{{sshConfiguration}}" 

Funziona molto bene, ma come leggere questi tasti per inviarlo al github tramite l'API?

+0

Qual è la funzionalità del compito che si sta cercando di avere letto questo file? Posso pensare ad alcuni modi, ma ho bisogno di un po 'più di contesto. –

+0

Modifica la domanda con il mio caso d'uso – Kiva

risposta

9

Come hai detto, tutte le ricerche sono su localhost. Ma tutti possono essere fatti su remoto usando shell e register. Puoi dire cosa stai cercando di fare esattamente? solo un esempio

- shell: cat "{{remote_file}}" 
    register: data 

    - shell: ...... 
    with_xxxx: 
+0

Ho provato a farlo, ma non posso perché ho bisogno di eseguire il ciclo su un altro oggetto. – Kiva

+0

risposta errata, evitare i moduli di shell e di comando laddove possibile (non sono naturalmente idempotenti), dovresti usare il modulo slurp .. discutibile che poiché si tratta di un comando di sola lettura un comando di shell è accettabile ma è meglio abituarsi evitando comandi shell dove esiste una soluzione naturale ansibile .. vedi la mia risposta sotto per l'approccio migliore – danday74

3

Si può provare il modulo 'fetch', che recupererà il file di chiave per un percorso di destinazione sul localhost:

fetch: 
    src: ".ssh/{{item.value.file}}" 
    dest:"/tmp/ssh_keys/{{item.value.file}}" 
    flat: yes 
with_dict: "{{sshConfiguration}}" 
+0

buona risposta ma lo slurp è meglio che evita di creare un file tmp su localhost .. i documenti per fetch dicono che sotto il cofano usa slurp – danday74

+0

@ danday74 Sei corretto nel fatto che usando lo slurp eviterai il file temporaneo. Tuttavia, rileggendo la nota per il recupero, si afferma "* Quando si esegue il recupero con' diventa', verrà utilizzato anche il modulo slurp [...] * ". In questo esempio, non sta usando diventare – Oberst

24

O correre con la bandiera --diff (emette un diff quando il file di destinazione modifiche) ..

ansible-playbook --diff server.yaml 

o slurp in su ..

- name: Slurp hosts file 
    slurp: 
    src: /etc/hosts 
    register: slurpfile 

- debug: msg="{{ slurpfile['content'] | b64decode }}" 
+0

, ma credo che questo un giorno sarà la risposta migliore – danday74

+1

Questa dovrebbe essere la risposta corretta ... –

1

È possibile registrare il contenuto del file in una variabile utilizzando il comando di registro. Ecco cosa suggerirei,

- name: get contents of file 
    command: cat /path/to/file 
    register: filename 
    become: true # use case specific option 

- name: viewing the contents 
    debug: 
    msg: "{{filename.stdout}}" 

Questo visualizzerà il contenuto del file.

0

Utilizzando il modulo di comando è possibile leggere o utilizzare tale file in un'altra attività nel nodo remoto.

come

-command: cp /tmp/xxx/example.sh /usr/local/yyy