Ansible (15) OSによって実行するアクションを変える

こんにちは。

グローバルソリューション事業部の吉村です。

 

前回に引き続き、条件や制約がある中でのAnsibleの利用について書きます。

今回は、gathering facts を利用して、条件分岐をしようと思います。

 

gathering facts は、Ansible が勝手に実行する 事前確認 みたいなものです。

動作としては、setup module を動かしており、勝手にしていると思いきや、

ここで得た情報を Ansible が Playbook を実行中に変数として保持し続け、手助けをしてくれます。

つまり、こっちは何も言ってないのに、「あー、あれ欲しいなぁ」って時に、「これ余ってるけど使う?」

って横からさっと情報をくれるんです。

私とはい、Ansible は出来る男です。

 

例として、適当なテストサーバに setup module を実行してみましょう。

※とても長いので、流して見てください。

 

出来る男っていうか、出来すぎて嫌われるタイプですね(笑)

 

いろいろな情報を取得してきてくれますが、例えば、

  • OSの種類 ”ansible_os_family”
  • カーネルバージョン ”ansible_kernel”
  • サーバのドメイン名 ”ansible_domain”
  • デフォルトゲートウェイ ”gateway”
  • Swap空き容量 ”ansible_swapfree_mb”
  • デバイス空き容量  “size_available”

こういった情報を条件分岐として利用できるので、想像するだけで便利そうですよね!

 

前置きが長くなりましたが、条件分岐を行った Playbook を書いていきましょう。

 


 

条件2.OSで条件を付ける

よくあるのが、何かパッケージをインストールする際に、CentOSだったら yum で、Ubuntuだったら apt という条件式ですね。

この時に使うのが、先ほども出てきた、“ansible_os_family” です。

 

例えば、hudecof さんが作った zabbix agentをインストールするPlaybookを見てみましょう。

tasks ディレクトリやvars ディレクトリ配下に、RedHat と Debian それぞれ yml ファイルが用意されています。

ここの条件分岐を決めているのは、ansible_zabbix_agent/tasks/main.yml ファイルでした。

その中身をみると、

 

 注目すべきは、12~18行目です。

 

 when で条件分岐として、OSの種類が Debian かRedhat かで、

include する yml ファイルが異なるようになっています。

このような記述方法で、OSの条件分岐が可能です。

 

また、わざわざ include する yml ファイルを分けずに、
1つの yml ファイルの中だけで実行内容を分けてもOKです。

例えば、私は以下のようなPlaybookを作ってみました。

 

install-zabbix-agent/roles/common/tasks/main.yml の中身は、以下のようになっています。

 

1つのファイルに書いているので、とても長くて見にくいです。
恥ずかしい…。

 


 

 

まとめ

今回は長くなってしまったので、まとめとして、

1.gathering facts は便利でいいやつ

2.OS毎の条件分岐は、when: ansible_os_family == ‘●●’ を使う

この2つだけ、覚えておけばOKです。

 

今回は以上です!

 

 

Share on LinkedIn
LINEで送る
Pocket

吉村

吉村

クララオンライン グローバルビジネスストラテジー部でマーケティング担当として働いています。 クラウド関連技術と中国関連の情報をお届けしてます。 たまに DJ とかします。日本語RAPが大好きです。