2017-05-10 100 views
0

我正在嘗試編寫一個在數據庫刷新後將rsync文件夾從源文件夾同步到目標文件夾的playbook。我們的Peoplesoft HR應用程序還需要與數據庫一起刷新文件系統。我是新手,而不是Python的專家。我寫過這個,但如果任何with_items不存在,我的playbook將會失敗。我想爲所有應用程序使用此Playbook,並且這些文件夾可能因應用程序而異。如何跳過源代碼中不存在的文件夾。我在命令行通過{{ target }}。謝謝!Ansible Playbook - Synchonize模塊 - 寄存器變量和with_items

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

    tasks: 
    - shell: ls -l /opt/custhome/prod/ 
     register: folders 

    - name: "Copy PROD filesystem to target" 
     synchronize: 
     src: "/opt/custhome/prod/{{ item }}" 
     dest: "/opt/custhome/dev/" 
     delete: yes 
     when: "{{ folders == item }}" 
     with_items: 
     - 'src/cbl/' 
     - 'sqr/' 
     - 'bin/' 
     - 'NVISION/' 

在這種情況下,NVISION不在HR應用程序中存在,但它在FIN應用程序中。但是劇本失敗了,該文件夾不存在於源文件中。

回答

0

您可以使用find module查找並存儲源文件夾的路徑,然後遍歷結果。例如劇本:

- 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 }}" 

您可能需要使用recurse下降到子目錄和use_regex使用Python正則表達式,而不是外殼通配的力量。

+0

謝謝你的回覆,安德魯。其實我找到了一種方式,但是你的方式好多了。我最終做的是: - shell:ls -l/opt/ppscust/{{target [:3]}}/{{target [:3]}} prd/| grep -e「src」-e「sqr」-e「bin」-e「NVISION」| awk'{print $ 9}' register:folders 並在with_items中傳遞folders.stdout_lines。我會試試你的方式,因爲我更喜歡它。謝謝!!! – Mayank