Skip to content
TERAOKA Yoshinori edited this page Dec 22, 2013 · 2 revisions

戻る

条件付き実行

taskwhen で条件を指定し、それを満たす場合にのみ実行させることができます。 次の例では Debian でのみコマンドを実行します。この変数 ansible_os_familyGATHERING FACTS で得られるものです。

tasks:
  - name: "shutdown Debian flavored systems"
    command: /sbin/shutdown -t now
    when: ansible_os_family == "Debian"
tasks:
  - shell: echo "only on Red Hat 6, derivatives, and later"
    when: ansible_os_family == "RedHat" and ansible_lsb.major_release|int >= 6

ansible-playbook 実行時に -e nmae=value で指定した変数によって動作を変えることができます。

# is_hogehoge 変数に何か指定してある場合
  - command: hogehoge
    when: is_hogehoge is defined

# branch を指定して deploy
  - command: deploy-command {{branch}}

また、ある task の結果を変数に入れておき、その値を使って条件を指定することができます。

tasks:
  - command: /bin/false
    register: result
    ignore_errors: True
  - command: /bin/something
    when: result|failed
  - command: /bin/something_else
    when: result|success

1番目の task は /bin/false なのでかならず失敗しますが、 ignore_errors によってエラーでも続行されます。 register で result という変数に task の結果が保存されます(結果を変数に保存して利用する を参照)。以降の task で when を使ってその結果を条件として利用することができます。2番目の task は1番目が失敗した場合にのみ実行されます。3番目は1番目の task が成功した場合にのみ実行されます。 register: 任意の名前 で結果を保存します。 (Conditional Execution)

次の例は /some/directory が作成された場合にのみ、次の commmand a が実行されます。 /some/directory が既に存在していた場合は changed とならないので command a は実行されません。

  - file: state=directory path=/some/directory
    register: create_dir

  - command: command a
    when: create_dir.changed
Clone this wiki locally