ホーム > Ansible Tower・AWX リファレンス
Ansibleも他言語と同様に条件分岐処理を実装することが可能です。ここでは、実例を交えながら条件分岐処理の記述方法を解説したいと思います。
Ansibleでのループ処理は、他言語でよく見かけるIf文ではなく、「when」ディレクティブを使用します。
書式
whenディレクティブの書式です。
- name: 処理名 処理: when: 分岐条件
比較演算子を使った条件分岐
比較演算子を使用した条件分岐のサンプルです。
使用できる比較演算子
条件として使用できる比較演算子です。
演算子 | 説明 |
---|---|
x == y | x の値と y の値が等しい場合は ture |
x != y | x の値と y の値が等しくない場合は true |
x > y | x の値が y の値より大きい場合は true |
x < y | x の値が y の値より小さい場合は true |
x >= y | x の値が y 以上の場合は true |
x <= y | x の値が y 以下の場合は true |
値が一致する場合のサンプル
x と y の値が一致する場合のサンプルです。
---
- hosts: all
gather_facts: False
tasks:
- name: 比較演算子を使った条件分岐
vars:
x: 100
y: 100
debug:
msg: 値xと値yは一致します。
when: x == y
実行結果です。
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [比較演算子を使った条件分岐] ***********************************************************
ok: [192.168.56.105] => {
"msg": "値xと値yは一致します。"
}
PLAY RECAP *********************************************************************
192.168.56.105 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
y の値を[200]に変更して実行してみました。
値が一致しない場合は処理がスキップされます。
検索
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [比較演算子を使った条件分岐] ***********************************************************
skipping: [192.168.56.105]
PLAY RECAP *********************************************************************
192.168.56.105 : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
論理演算子を使った条件分岐
論理演算子を使用した条件分岐のサンプルです。
また、複数の条件を用いた条件分岐についてもこちらで説明しています。
使用できる論理演算子
演算子 | 説明 |
---|---|
not 条件1 | 条件1 が false の場合は true |
条件1 and 条件2 | 条件1 と条件2 の両方が true の場合は true |
条件1 or 条件2 | 条件1 か 条件2 のどちらかが true の場合は true |
2つの条件の両方がtrueの場合のサンプル
条件1 と条件2 の両方がtrueの場合に処理を実行するサンプルです。
---
- hosts: all
gather_facts: False
tasks:
- name: 論理演算子を使った条件分岐
vars:
x: 100
y: 100
debug:
msg: 条件1 と 条件2 は ture です。
when: x == 100 and y == 100
実行結果です。
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [論理演算子を使った条件分岐] ***********************************************************
ok: [192.168.56.105] => {
"msg": "条件1 と 条件2 は ture です。"
}
PLAY RECAP *********************************************************************
192.168.56.105 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
y の値を[200]に変更して実行してみました。
2つの条件の片方でも、trueとならない場合は処理がスキップされます。
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [論理演算子を使った条件分岐] ***********************************************************
skipping: [192.168.56.105]
PLAY RECAP *********************************************************************
192.168.56.105 : ok=0 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
ある値が配列に含む・含まれない場合の条件分岐
in演算子を使用した条件分岐のサンプルです。
ある値が配列に含まれる(含まれない)場合に処理を実行する条件を設定することが可能です。
使用できるin演算子
演算子 | 説明 |
---|---|
値a in [x, y, z] | 値a と同じ値が x, y, z に含まれる場合は true |
値a not in [x, y, z] | 値a と同じ値が x, y, z に含まれない場合は true |
値a in 配列x | 値a と同じ値が 配列x に含まれる場合は true |
値a not in 配列x | 値a と同じ値が 配列x に含まれない場合は true |
ある値が配列に含まれる場合のサンプル
値a が配列x に含まれる場合に処理を実行するサンプルです。
---
- hosts: all
gather_facts: False
tasks:
- name: in演算子を使った条件分岐
vars:
a: 100
x:
- 100
- 200
- 300
debug:
msg: 値a は配列x に含まれます。
when: a in x
実行結果です。
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [in演算子を使った条件分岐] ***********************************************************
ok: [192.168.56.105] => {
"msg": "値a は配列x に含まれます。"
}
PLAY RECAP *********************************************************************
192.168.56.105 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
a の値を[900]に変更して実行してみました。
配列に含まれた値と一致する値が存在しないため処理がスキップされます。
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [in演算子を使った条件分岐] ***********************************************************
skipping: [192.168.56.105]
PLAY RECAP *********************************************************************
192.168.56.105 : ok=0 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
変数が定義されている・されていない場合の条件分岐
変数が定義されている場合、または定義されていない場合に処理を実行するサンプルです。
書式
変数が定義されている、されていない場合の条件分岐は「変数名 is defined」と記述します。
項目 | 書式 |
---|---|
定義されている | when: 変数名 is defined |
定義されていない | when: 変数名 is not defined |
変数が定義されている場合のサンプル
変数が定義されている場合のみに処理を実行するサンプルです。
---
- hosts: all
gather_facts: False
tasks:
- name: 変数が定義されている例
vars:
foo: "変数の定義"
debug:
msg: "変数は定義されています。"
when: foo is defined
- name: 変数が定義されていない例
debug:
msg: "変数は定義されていません。"
when: bar is defined
実行結果です。変数が定義されている場合のみ処理が実行されていることが分かります。
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [変数が定義されている例] *************************************************************
ok: [192.168.56.106] => {
"msg": "変数は定義されています。"
}
TASK [変数が定義されていない例] ************************************************************
skipping: [192.168.56.106]
PLAY RECAP *********************************************************************
192.168.56.106 : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
変数が定義されていない場合のサンプル
変数が定義されていない場合のみに処理を実行するサンプルです。
---
- hosts: all
gather_facts: False
tasks:
- name: 変数が定義されている例
vars:
foo: "変数の定義"
debug:
msg: "変数は定義されています。"
when: foo is not defined
- name: 変数が定義されていない例
debug:
msg: "変数は定義されていません。"
when: bar is not defined
実行結果です。変数が定義されていない場合のみ処理が実行されていることが分かります。
SSH password:
BECOME password[defaults to SSH password]:
PLAY [all] *********************************************************************
TASK [変数が定義されている例] *************************************************************
skipping: [192.168.56.106]
TASK [変数が定義されていない例] ************************************************************
ok: [192.168.56.106] => {
"msg": "変数は定義されていません。"
}
PLAY RECAP *********************************************************************
192.168.56.106 : ok=1 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
ファイルの存在有無で条件分岐
ファイルの存在確認を行い、その結果を元に処理を条件分岐させる方法については以下の記事で説明しています。
記事は以上です。
If文同様の基礎的な文法となるFor文(ループ処理)は以下を参考にして下さい。
コメント