0

Ansible はロールアウトに最適です (この場合は JBoss)。プレイブックの一部は次のとおりです。

- name: copy jboss-eap-6.2.0.tar.gz to server
  action: copy src=jboss-eap-6.2.0.tar.gz
               dest=/tmp/jboss-eap-6.2.0.tar.gz
               owner=root
               group=root

- name: Extracting jboss-eap-6.2.0.tar.gz
  command: /bin/tar xfz /tmp/jboss-eap-6.2.0.tar.gz -C /opt

これは魅力のように機能しますが、毎回機能することを除いて、JBoss が既にインストールされている場合は Ansible に Playbook を停止させたいと考えています (私たちの場合、テストは/opt/jboss-eap-6.2.0存在するかどうかです。これを行う最も適切な方法は何ですか? 提供できますか? when-clause でターゲットサーバーに何かが存在するかどうかのテスト ?

4

1 に答える 1

2

コマンドの実行のみをスキップしたい場合は、モジュールcreatesのパラメーターが 問題を解決します。宛先ファイル/ディレクトリが既に存在する場合、コマンドの実行をスキップするようにモジュールに指示します。command

次に例を示します。

- name: Extracting jboss-eap-6.2.0.tar.gz
  command: creates=/opt/jboss_dir /bin/tar xfz /tmp/jboss-eap-6.2.0.tar.gz -C /opt

あなたの特定のケースはもう少しトリッキーです。第 1 に、アーカイブは にコピーしているため、再起動後に存続しない/tmp可能性があるため、プレイブックを実行するたびにコピーされる可能性があります。次に、jboss ディレクトリの存在を確認するためだけに追加のタスクを導入する必要がある場合があります。

次のタスクは次のようになります。

  • create /opt/jboss_dirdirectory まだ存在しない場合、このタスクの結果はjbossDirectory変数に格納されます
  • jbossDirectoryステータスがある場合changed、アーカイブはにコピーされます/tmp
  • 同じchangedステータスでもアーカイブの抽出が発生します

プレイブックの例:

- name: create jboss directory
  file: state=directory dest=/opt/jboss_dir owner=root user=root
  register: jbossDirectory

- name: copy jboss-eap-6.2.0.tar.gz to server
  copy: src=jboss-eap-6.2.0.tar.gz dest=/tmp/jboss-eap-6.2.0.tar.gz owner=root group=root
  when: jbossDirectory|changed

- name: extracti jboss-eap-6.2.0.tar.gz
  command: /bin/tar xfz /tmp/jboss-eap-6.2.0.tar.gz -C /opt
  when: jbossDirectory|changed
于 2014-01-21T11:53:25.793 に答える