MeCabのRoleを作った
Ansible Galaxy
MeCabは自然言語処理における形態素解析エンジン。VM上で利用しようと思ったとき真っ先に最近はAnsible GalaxyでRoleを探すんだけどMeCabのRoleがなかった。とりあえずCentOS上で利用したかったのではじめてRoleを作って登録してみた。
最近はAnsibleのPlaybook作るときには自前でRoleを用意せずGalaxyを使ってRoleを再利用している。Roleの作成コストはすごく大きくてはじめのうちはどう作って良いのかわからない。GalaxyはどういうRoleの作成方法がベストなのかを教えてくれたし、再利用性によって一からRoleを作成するコストを大きく削減してくれた。
今回ははじめてRoleを作ったので、簡単にRoleの作り方を紹介する
Roleの作り方
ansible-galaxy init
を実行するとRoleの雛形ができる。すでにtaskを作っているのであればコピーして書けば良い。varsやdefaultsに記述する変数は命名規則があるので参考にして欲しい。
Roleに登録するのに必須となるのがmetaデータの記述だ。通常どおりmetaデータには依存しているロールを書ける。だが今回はGalaxyに登録する情報も記述してやる必要がある。予め meta/main.yml
に書かれている案内の通りメタデータを追記すればいい。出来たRoleはgithubにpushしておこう。
travisciの力を借りているのでリモートリポジトリを作成した段階でtravisci側でwatchするように設定しておくのを忘れずに。
最後にansible galaxyにサインインしてimport Roleから該当のリポジトリを選択してimportしてやり、role名を適宜変えてやれば完成だ。
いいRole
いいRoleとはどういうものかわからないけど参考にしたRoleがある。
彼のRoleはすごく参考になった。varsやdefaultsの利用方法がきっちりわけられていてディストリビューションごとの違いをうまく吸収している。
また、アプリケーションのインストール方法について書かれたRoleでは依存するDBに関するtaskを実行するか否かをユーザーが決められる猶予があるRoleもよい。
このRoleにはMongoDBが利用されているがCentOSでインストールされるのは2系だ。これではレプリケーションを組む時にエラーが起こった。バージョン選択の余地は用意されておらず途方にくれていたが、MongoDBのインストールをしないという選択肢が用意されていた。そこでMongoDBのインストールは別のRoleを使い無事にアプリケーションの起動まで出来たのだ。
ガチガチに凝り固まったRoleは再利用できてもフィットするシーンが限られる。 よいRoleは幅広い用途に耐えうる設計がされている必要があると思う。
終わりに
Ansibleはとてもいいツールだと思ってるしこれからも使っていくと思う。GalaxyへのRoleの追加も適宜やっていきたい。このRoleについてははじめてだったけど公開まで2時間くらいで出来たし (taskは予め作ってました) これからはもっと早くできると思う。
Ansibleに期待するのは状態チェックのための機能の充実だ。Check modeではサーバの状態がplaybook通りか調べることができるがインストールされている必要があるものがインストールされていないとその後の設定ファイルコピーのチェックをすっ飛ばしてしまう。部分的にtaskを実行するにはtagをつけるか実行するRoleに制限をつけるかしかないんだけどサーバへの状態チェックのためだけにやるには手間だ。このあたりが充実してくればもっと捗ると思う。