2017-05-10 9 views
0

私は、データベースをリフレッシュした後にソースからターゲットにフォルダをrsyncするプレイブックを書こうとしています。 Peoplesoft HRアプリケーションでは、データベースと一緒にファイルシステムを更新する必要があります。私は無能な人には新しく、Pythonの専門家ではない。私はこれを書いていますが、with_itemsが存在しなければ私のプレイブックは失敗します。私はこのプレイブックをすべてのアプリに使いたいのですが、フォルダはアプリごとに異なるかもしれません。ソースに存在しないフォルダをスキップする方法はありますか。コマンドラインで{{ target }}を渡しています。ありがとう!有能なプレイブック - 同期モジュール - 変数とwith_itemsを登録

この場合、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 }}" 

あなたはPythonの正規表現の代わりに、シェルグロブの電源を使用するサブディレクトリとuse_regexに下降しrecurseを使用することができます。

+0

返信いただきありがとうございます、アンドリュー。実際に私は方法を見つけましたが、あなたの方がはるかに優れています。私がやったことは、次のとおりです。 - シェル:ls -l/opt/ppscust/{{target [:3]}/{{target [:3]} prd/| grep -e "src" -e "sqr" -e "bin" -e "NVISION" | awk '{print $ 9}' 登録: と入力し、with_itemsにfolders.stdout_linesを渡します。私はあなたのやり方を試してみるよ。ありがとう!!! – Mayank

関連する問題