【Ansible】whenで処理を分岐させてみた

f:id:hira98:20190711230105p:plain

【結論】

  • Ansibleで、プログラムのif文に相当する処理を行いたい場合はwhenを使う。
  • whenはif文と同じノリで条件式を記述することができる。

【目次】

はじめに

Pythonプログラム読めない私がAnsibleのYAMLの書き方を理解するための備忘録です。

よって、Pythonの基礎文法については解説しません。

Pythonで書いた場合

var_boolean = True
var_num1 = 10
var_num2 = 20
var_string = "hoge"

if var_boolean:
  print(f"check boolean -> {var_boolean}")

if (var_num1 + var_num2) == 30:
  print(f"check num -> {var_num1 + var_num2}")

if var_string == "hoge":
  print(f"check string -> {var_boolean}")

Ansibleで書いた場合

プレイブック(.yml形式)

---
- hosts: localhost  # 自分自身に接続する
  tasks:

  # 以降がPythonソースに該当する部分
  - set_fact:
      var_boolean: true
      var_num1: 10
      var_num2: 20    
      var_string: "hoge"    

  - debug: msg="check boolean -> {{ var_boolean }}"
    when: var_boolean == true

  - debug: msg="check num -> {{ var_num1 + var_num2 }}"
    when: (var_num1 + var_num2) == 30

  - debug: msg="check string -> {{ var_string }}"
    when: var_string == "hoge"

set_factモジュールで変数を宣言して、debugモジュールでログを出力するかの判定をwhenで行なっています。

実行結果

ワーニングが出ている理由、hostsでインベントリファイルのグループを指定せずにlocalhost(自分自身に接続するためのIPアドレスが格納された変数)を指定しているためです。

f:id:hira98:20190711230127p:plain

参考情報

Ansible実践ガイド 第2版 - インプレスブックス

さいごに

Javaじゃなくて、Pythonとか😭」

Windows使いづらい😭」

などと開発言語や開発環境に対して嘆いている暇があるのなら、

  • 日本語を使って正確な情報のやりとりしたり、
  • 相手が何を求めているかを把握して求めているものを提供できるように行動したり、
  • 情報を整理する能力だったり、
  • …etc

といった社会人として生きていく上で基礎的なヒューマンスキルを磨くべきだなと、本日の設計担当との打ち合わせの内容を振り返って思いました。