2017-05-10 4 views
0

Ich versuche, ein Playbook zu schreiben, das die Ordner rsync von der Quelle zum Ziel nach einer Datenbankaktualisierung. Unsere Peoplesoft HR-Anwendung erfordert auch eine Aktualisierung des Dateisystems zusammen mit der Datenbank. Ich bin neu zu ansible und nicht ein Experte mit Python. Ich habe dies geschrieben, aber mein Playbook schlägt fehl, wenn eine der with_items nicht existiert. Ich möchte dieses Playbook für alle Apps verwenden und die Ordner können sich je nach App unterscheiden. Wie kann ich die Ordner überspringen, die nicht in der Quelle vorhanden sind? Ich übergebe {{ target }} an der Befehlszeile. Vielen Dank!Ansible Playbook - Synchonize-Modul - Variable registrieren und with_items

In diesem Fall existiert NVISION nicht in der HR-App, aber in der FIN-App. Aber das Playbook schlägt fehl, da dieser Ordner in der Quelle nicht existiert.

Antwort

0

Sie können find module verwenden, um Pfade zu Quellordnern zu suchen und zu speichern und dann über die Ergebnisse zu iterieren. Beispiel Textbuch:

- hosts: '<hostname>' 
    remote_user: <user> 

    tasks: 
    - name: find all directories 
     find: 
     file_type: directory 
     paths: /opt/custhome/prod/ 
     patterns: 
      - "src" 
      - "sqr" 
      - "bin" 
     register: folders 

    #debug to understand contents of {{ folders }} variable 
    # - debug: msg="{{ folders }}" 

    - name: "Copy PROD filesystem to target" 
     synchronize: 
     src: "{{ item.path }}" 
     dest: "/opt/custhome/dev/" 
     delete: yes 
     with_items: "{{ folders.files }}" 

Möglicherweise möchten Sie recurse verwenden, um in Verzeichnisse absteigen und use_regex die Macht der Python Regex verwenden anstelle von Shell Globbing.

+0

Vielen Dank für Ihre Antwort, Andrew. Eigentlich habe ich einen Weg gefunden, aber dein ist viel besser. Was ich getan habe, war: - Shell: ls -l/opt/ppscust/{{Ziel [: 3]}}/{{Ziel [: 3]}} prd/| grep -e "src" -e "sqr" -e "bin" -e "NVISION" | awk '{print $ 9}' registrieren: Ordner und übergeben Sie folders.stdout_lines in with_items. Ich werde es versuchen, weil es mir besser geht. Vielen Dank!!! – Mayank