2016-06-14 4 views
0

Im Folgenden ein Teil eines Textbuch in ansible 2,1:ansible: Registerinhalt nicht für andere Host

- hosts: localhost 
    any_errors_fatal: true 
    tasks: 
    - name: Bla Bla 
     file: path=/var/tmp/somedir state=directory 
     #ignore_errors: no 
    - name: Create directory for every host 
     file: path=/var/tmp/somedir/{{ item }} state=directory 
     with_items: "{{ groups['XYZ'] }}" 
    - name: Get File contents of NewFile 
     shell: cat NewFile.txt executable=/bin/bash 
     register: file_contents 
- hosts: XYZ 
    #any_errors_fatal: true 
    vars: 
    num_hosts: "{{ groups['XYZ'] | length }}" 
    serial: num_hosts 
    tasks: 
    - name: Copy files to corresponding directories 
     vars: 
     path: /var/tmp/somedir/{{ item[0] }} 
     synchronize: mode=pull src={{ item[1] }} dest={{ path }} 
     with_nested: 
      - "{{ groups['XYZ'] }}" 
      - with_lines: cat NewFile.txt 

Dies funktioniert nicht. Nun das Problem ist, ich bin nicht in der Lage file_contents zu verweisen, die unter localhost registriert wurden und ansible unterstützt nicht cat die NewFile vom hosts: XYZ

Gibt es eine Möglichkeit, dies in irgendeiner einfachen Art und Weise zu tun? Ich muss den Inhalt des NewFile nur in diesem Playbook überprüfen und dann dasselbe zum Kopieren von Dateien von Remote zu Local verwenden.

+0

haben Sie versucht, set_fact, wenn nicht nur versuchen, den Wert der file_contents einer Variablen zuweisen, indem Sie set_fact, dann wird es im gesamten Playbook verfügbar sein. –

+0

i versucht 'set_fact' den Wert der Einstellung‚'file_contents' auf eine Variable' lines' und verwendet dann die gleiche Variable in: 'with_nested: - "{{Gruppen [ 'XYZ']}}" - with_items: lines' Ich bekomme den folgenden Fehler: 'link_stat \"/home/XYZ/with_items \ "fehlgeschlagen: Keine solche Datei oder Verzeichnis" –

+0

Verwenden Sie das Debug-Modul und überprüfen Sie den Wert der Zeilen –

Antwort

0

Wie in den Kommentaren erwähnt, werden Fakten (oder alle Variablen) auf einer Host-Basis gespeichert. Wenn Sie Werte von einem unter localhost ausgeführten Task registriert haben, können Sie von jedem Task aus, der im Kontext anderer Hosts ausgeführt wird, über das globale hostvars dict zugreifen. Alle Hosts und ihre Fakten sind dort gespeichert:

hostvars['localhost']['file_contents'] 

Ich bin nicht ganz sicher, einfach registriert Variablen im hostvars dict zur Verfügung stehen. Wenn nicht, müssen Sie set_fact in der ersten Wiedergabe verwenden, um es als Fakt zu speichern.

+0

Sie wollen, dass ich so etwas benutze, 'Aufgaben: - Name: Kopiere Protokolldateien in entsprechende Knotenverzeichnisse vars: Pfad:/var/tmp/somedir/{{Element [0]}} #shell: scp -pr ogw @ {{Element [0 ]}}: {{item [1]}} {{pfad}} ausführbare =/bin/bash synchronisieren: mode = ziehen src = {{item [1]}} dest = {{pfad}} with_nested: - "{{groups ['XYZ']}}" - with_items: "{{hostvars ['localhost'] ['file_contents']}}" ' Auch das obige gibt Ich habe einen Fehler bei 'with_items'. In 'with_items' sind keine Werte gespeichert –

Verwandte Themen