ansibleのhash behaviourを変更して環境別の変数を定義しやすくする

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

この記事は ansible advent calender18日目の記事です。
この記事では、ansibleのhash behaviourを変更して環境別の変数を定義しやすくするtipsを紹介します。

hash behaviourとは

ansibleのhash構造の変数が複数ファイルで定義されてる場合のマージポリシーを規定する設定項目です。これを上手く使うと、環境別の定数を定義しやすくなり、roleの再利用性が上がります。

変数をmerge/replaceモードで出力する

gitという定数を複数のファイルで定義し、中身を出力してみます

hash_behaviour=replace(デフォルト)の場合

base.ymlで定義したkey “repo”が、merge policy = replaceだと消えてしまいます

hash_behaviour=mergeの場合

base.ymlで定義したkey “repo”はそのまま残り、overide.ymlで定義したkey “branch”が上書かれています

この動きを利用すると、環境別の定数を複数ファイルに分けroleの再利用性を高める事ができます。

オススメの使い方

  • 共通で使うような設定はroles/hoge/default/main.ymlへ
  • 環境毎の設定はhosts/${env}/${region}/group_vars/all.ymlへ
  • inventory group毎の設定はhosts/${env}/${region}/group_vars/${inventory_group}.ymlへ

各roleはrole内で定義した定数のみで最低限プロビジョニングできるようhashで定数を定義し、環境毎の差異はhosts以下の変数でオーバイライドするようにしてやるとroleの取り回しがよくなります。

haproxyのroleを作成する

  • 以下の要件で作成します
    • role/default/main.yml内で、haproxyのversionやtimeout設定を定義
      • 全環境で共通で使う設定を書く
    • hosts/prod/jp/group_vars/all.ymlに、${env} x ${region}で共通使用されるslaveの接続先hostを定義
      • 本番系統でレプリケーションをはってるdb-slave群を3306とバインドするhostとして定義
    • hosts/prod/jp/group_vars/admin.ymlに非サービス系統用DB接続情報を定義
      • いわゆる社内分析系(クソ)クエリを投げるホストなので、サービス系統とは分けたDBにつなぐよう定義

これら変数を読みに行くよう、playbookを作成します。web、adminでそれぞれ別変数ファイルを用いる事で、roleは共通利用する事ができます。

参考

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*