2016-09-29 5 views
0

Ich versuche, eine Datei von einem Remote-Host abrufen. Doch nach einem Blick auf einige Beispiele auf Stackoverflow führen die unteren beiden Methoden in den Folgefehler:Ansible Fetch Quote Fehler

- shell: ls -f ubuntu_s* 
    register: file_name 
- fetch: src=/home/ubuntu/{{file_name.stdout_lines}} dest=/home/user 


- shell: ls -f ubuntu_s* 
     register: file_name 
    - fetch: src={{item}} dest=/home/user 
     with_items: "{{file_name.stdout_lines}}" 

Fehler:

ERROR! this task 'fetch' has extra params, which is only allowed in the following modules: command, shell, script, include, include_vars, add_host, group_by, set_fact, raw, meta 

The error appears to have been in '/home/user/BuildPkg.yml': line 49, column 7, but may 
be elsewhere in the file depending on the exact syntax problem. 

The offending line appears to be: 

     register: file_name 
    - fetch: src=/home/ubuntu/{{file_name.stdout_lines}} dest=/home/user 
    ^here 
We could be wrong, but this one looks like it might be an issue with 
missing quotes. Always quote template expression brackets when they 
start a value. For instance: 

    with_items: 
     - {{ foo }} 

Should be written as: 

    with_items: 
     - "{{ foo }}" 


The error appears to have been in '/home/user/BuildPkg.yml': line 49, column 7, but may 
be elsewhere in the file depending on the exact syntax problem. 

The offending line appears to be: 

     register: file_name 
    - fetch: src=/home/ubuntu/{{file_name.stdout_lines}} dest=/home/user 
    ^here 
We could be wrong, but this one looks like it might be an issue with 
missing quotes. Always quote template expression brackets when they 
start a value. For instance: 

    with_items: 
     - {{ foo }} 

Should be written as: 

    with_items: 
     - "{{ foo }}" 

Beide Ansätze geben den gleichen Fehler. Was scheint falsch zu sein?

Antwort

2

Versuche zu vermeiden shell wo möglich zu analysieren. Module - das ist der Ansible Weg.
Wenn Sie eine Liste von Dateien von Remote-Host erhalten müssen und holen sie:

- find: 
    pattern: ubuntu_s* 
    path: /home/ubuntu/ 
    register: myfiles 
- fetch: 
    src: "{{ item.path }}" 
    dest: /home/user 
    flat: yes 
    with_items: "{{ myfiles.files }}" 
+0

das hat super funktioniert! Nur eine Anmerkung, wenn Sie größere Dateien übertragen möchten fügen Sie hinzu: Nein zu diesem – latencybit

+0

@LAtenTentityBit für große Dateien gibt es auch 'Synchronisieren' Modul –

1

Der richtige Weg ist Looping über Datei Klackse, wie:

- fetch: src={{ item }} dest=/home/user 
    with_fileglob: 
    - ubuntu_s* 

Hinweis: know what you may face wann immer versucht, ls Ausgabe

+0

benötige ich noch die Shell, registrieren Befehle? – latencybit

+0

nein, nur die eine über –

+2

Beachten Sie, dass 'with_fileglob' auf ** lokalen Ansible Host ** expandiert! Dies funktioniert nicht, um eine Liste von Dateien vom Remote-Host zu sammeln. –