2017-02-05 5 views
0

私のプレイブックのために、ワードプレスのディレクトリが変更された場合にのみ、後続のコードを実行するタスクを作成しようとしています。私は下のスクリプトを思いついたが、wordpressアプリケーションを再デプロイするコードは、wordpressディレクトリに変更が加えられたときには実行されていない。ディレクトリの内容が変更されている場合にのみ、タスクを実行できます

- name: Run if content is added or deleted in application directory 
    shell: find /var/www/html/wordpress -type f -exec md5sum {} \; | sort -k 2 | md5sum 
    register: change 

- name: Copy code to application directory 
unarchive: 
    src: /root/wordpress.zip 
    dest: /var/www/html 
    owner: apache 
    group: apache 
    mode: 0644 
when: 
    - change.stdout|success 
notify: 
    - Reload Apache server 

答えて

0

私は問題があなたがシェルモジュールを使用していると思います。 は、シェルモジュールは、それが「冪等は」焼き持っていないことを意味し、Ansibleでレベルのモジュールと考えられている。

だから、シェルコマンドは、デフォルトでは、あなたがそれを実行するたびに実行するために起こっています。

それは扱わ私が持っている方法は私のGitのレポの状態が上だアプリの状態との関係で変更された場合、私は私のアプリのために git moduleを使用し、そのgitのモジュールは、その後、私に語ったということです

私の生産。

例:

Gitのレポの状態は、サーバ上のレポザッツに関連して(変更されたときに変更が唯一の(あなたが望む行動を)、起こるために起こっている。この例では
- name: Ensure demo application is at correct release. 
     git: 
      repo: https://github.com/foobar 
      version: "{{ app_version }}" 
      dest: "{{ app_directory }}" 
      force: true 
      accept_hostkey: true 
     register: app_updated 
     notify: restart nginx 

)、そして私のプレイブックのすべての関連するアクションは、その事実に基づいて行われます。

だから、あなたは正しい軌道に乗っているが、私はあなたのソースディレクトリとリモートディレクトリの間に変更があった場合にのみ、ファイルやフォルダをコピーしますcopyモジュールを、使用することをお勧めします。

そして、変数を使ってその変更をキャッチして、後でそのプレイブックで使用することができます。

関連する問題