【Playbook概要】変数について 3章:条件分岐でタスクの事項要否を制御
3.条件分岐でタスクの事項要否を制御する
タスクを実行するかどうかの判定を行う方法を紹介
3.1.条件を使ってタスクの実行を成業する「when」
一部のタスクは特定のOSだけで実行したい場合
タスクに対しwhen
要素を追加、whenの値として条件式を記述し、その条件が満たされた場合のみタスクが実行
OSがCentOS
の場合:yum
OSがUbuntu
の場合:apt
を使って、httpd
をインストールさせる場合は以下のように記述
- 記載例
tasks: - name: CentOS用httpdインストール yum: name=httpd state=latest when: ansible_distribution == 'CentOS' - name: Ubuntu用httpdインストール apt: name=apache2 state=latest when: ansible_distribution == 'Ubuntu'
ymlで指定しているansible_distribute
はAnsibleが自動で実行しているsetup
モジュールにより設定された変数名 4.デフォルトで用意される変数を使う
を参照
whenの構文で変数は{{}}
で囲まずに参照可能
whenで指定する条件はJinja2
というPythonのテンプレートエンジンの文法を使用
whenで利用できる演算子は以下の通り
機能 | 演算子 | 利用例 |
---|---|---|
比較 | ==,!=,>,M,>=,<= | when:size > 100 |
論理 | and,or | when:size > 100 and size < 200 |
真偽値 | true,false | when:false |
含まれる | in, not in | when: name in ['hoge','hogehoge']| |
3.2.複数のタスクをまとめて制御する「block」
複数のタスクに対し同じ条件を設定する場合
whenのみ
では以下のように同じ条件判定を記載する必要がある。
修正に手間が掛かり、修正漏れも起こる可能性がある。
- 記載例
tasks: - name:CentOS用httpdインストール yum: name=httpd state=latest when: ansible_distribution == 'CentOS' - name:設定ファイルの転送 copy: src=httpd.conf dest=/etc/httpd/conf/ when: ansible_distribution == 'CentOS'
block
要素を利用し、複数のタスクをまとめることが出来る。
block
に対しwhen要素を指定することで、条件判定
を1箇所のみに可能
- 記載例
tasks: - block: - name: CentOS用httpdインストール yum: name=httpd state=latest - name: 設定ファイルの転送 copy: src=httpd.conf dest=/etc/httpd/conf/ when: ansible_distribution == 'CentOS'