Galaxy
Ansible

社内Ansible galaxy(共用role)を作ろう

これは何

自分でansible galaxy を作る。特に今回は公開のものではなくて、社内に限る共通roleを作る話。
実際に作ったroleは社内事情や秘匿情報を含むのでここには書きません。

背景

社内クラウドのリソースを管理するplaybookをある人が作った。その後それをコピーして他のサービスで同じコードを使った(以下繰り返し)。
何かミドルウェア仕様が変更になったり、設定を変えたい場合にすべてのサービスでメンテナンスコストが発生する。
この状態は最低だと思ったので、社内galaxyを作り共通roleにしようと考えた。
その時に考えたこと、ハマったことをここに記録しておきたい。

参考

作り方

  • meta/main.yml を配置する
    • 内容は ansible-galaxy init hoge で適当なものを作ってコピーしてくるのが楽
  • 使う
    • 上のmetaファイルだけ置いてしまえばもうansible-galaxy installで読み込める
    • ansible-galaxy install git+http://github.fuga.co.jp/dw-ansible/piyo.git --roles-path ./ex_roles/
  • 整理する
    • あくまでgalaxyはroleを共有するという感じなので、普通ansibleレポジトリにはinventoryやplaybookファイルが含まれていると思うが、それらを削除する
    • defaults/* ファイルへデフォルト設定を配置する

defaults/ について

  • どのようなサービスでも共通の設定はmain.ymlにおいておくと良い
  • 必ず変えて使って欲しいという変数はあえてデフォルトを配置せず実行時にエラーで落ちるようにしたほうが安全かなと思った
  • main.ymlは読み込まれるが他は特に指定しなければば読み込まれない。変えて欲しい値だけどテンプレートは欲しいよねというような値はtemplate-*.ymlみたいなのをおいて読み込み先のplaybookでコピーして書き換えてもらうのがよさそう

その他

  • 社内共通galaxyは、作るのはそこまで難しくないことがわかった
  • むしろ広報や運用が難しい。使ってもらわなければroleは育っていかないし、破壊的変更をすると困るユーザがいるはずなので合意を取って前にすすめていくのは大変。後方互換を保ったまま育てていくのもカオスになりがちだし、これからそこの悩みが出てきそう
  • とはいえ、作ればみんな喜ぶので積極的に共通パーツを作って展開していきたい