Ansibleでif文を使用する方法を記載します。
書き方は下記例のcommand:
部分のようになります。
この処理はansible-playbook
コマンドに指定する-e
オプションでecho
コマンドの出力結果を制御しています。
playbook.yml
- hosts: group1
tasks:
- name: echo実行
command: >-
{%- if key == 'A' -%} echo "Aです"
{%- elif key == 'B' -%} echo "Bです"
{%- else -%} echo "引数が正しくありません"
{%- endif -%}
register: command_result
- name: echo結果確認
debug:
msg: "{{ command_result.stdout }}"
動きとしては、ansible-playbook -i hosts playbook.yml -e "key=X"
のX
部分に、
A
を設定すれば「Aです」が出力され、
B
を設定すれば「Bです」が出力され、
それ以外だと「引数が正しくありません」と出力されます。
command: >-
の>-
部分は改行をスペースに変換するyamlファイルの構文です。参考
{%- -%}
はjinja2というpythonのWeb開発でよく使用されるテンプレートエンジンです。Ansibleではjinja2が使用できるため上記のような記述ができる訳です。参考
実行例
上記の例のplaybook.yml
を実行すると次のような結果となります。
インベントリファイル(hosts)の中身を知りたい方は次の記事をご参照ください。【参考】インベントリファイル(hosts)の内容
実行例
(base) mbp:ansible_work user$ ansible-playbook -i hosts playbook.yml -e "key=A"
PLAY [group1] *****************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************
ok: [55.66.123.178]
TASK [echo実行] ***************************************************************************************************************************************************************************
changed: [55.66.123.178]
TASK [echo結果確認] ***********************************************************************************************************************************************************************
ok: [55.66.123.178] => {
"msg": "Aです"
}
PLAY RECAP ********************************************************************************************************************************************************************************
55.66.123.178 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Udemy動画