ゆるい感じのプログラムを書きたい。

プログラムの敷居を下げて、多くの人が開発出来るように色々書いていきます!

【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'