Itamae | recipe plugin で 板前によるトイレ設置をプラグイン化する #devops #itamae
概要
プロビジョニングツール Itamae
recipe plugin で 板前によるトイレ設置をプラグイン化します。
※toilet コマンドのインストールをプラグイン化します。
※toilet コマンドについては下記リンク参照
http://www.tecmint.com/20-funny-commands-of-linux-or-linux-is-fun-in-terminal/
recipe plugin
公式 Wiki による Recipe Plugins の説明
https://github.com/itamae-kitchen/itamae/wiki/Recipe-Plugins
Itamae の recipe は gem で管理
Itamae では recipe の管理は gem で行います。
Chef の Cookbook + Berkshelf の構成にあたります。
Ruby の一般的なライブラリの管理と同じ方法で行うことができるため手軽です。
命名規則
Itamae の recipe plugin を作成する場合、 gem 名は
itamae-plugin-recipe-somename
のフォーマットにする必要があります。
例えば、 tree をインストールするレシピなら
itamae-plugin-recipe-tree
のようにします。
長く感じますが、実際に利用する際は
include_recipe 'tree'
だけで済みます。
命名規則の利便性
Chef の Cookbook の場合、命名ルールがまちまちで統一感がなかった、
という点を顧みての規約化なのかな?と類推しています。
その他の統一によるその他のメリットとして検索しやすい、という点があります
-
RubyGems で 「itamae-plugin-recipe」で検索すれば recipe plugin を確認できる
http://rubygems.org/search?utf8=%E2%9C%93&query=itamae-plugin-recipe -
GitHub で検索する場合も RubyGems の場合と同様のメリットがある
https://github.com/search?utf8=%E2%9C%93&q=itamae-plugin-recipe
課題?
例えば apache のインストールを行う recipe plugin を作るなら
itamae-plugin-recipe-apache
が最もシンプルで、この名前が一番オフィシャルな recipe plugin になると思います
まともにメンテする気のないの人にこの名前をとられてしまうと痛いですね。
上記の点を加味した解決策?
rutan さんが下記のレシピを公開されています
rtn => rutan かな?
プリフィックスを付与することで重要な名前である itamae-plugin-recipe-rbenv をあえて利用しない、
ということでしょうか。
一般の人が recipe plugin を作成する際は rutan さんのように何かしらプリフィックスを
付与するようにしておいたほうがよさそうです。
個人レベルなら GitHub のアカウント 。組織内で利用するなら 組織名 などが良いかな?
社内利用の場合は、 private な GemServer などを利用すると思うのでプリフィックスをつけなくてもいいかもしれませんが。
このあたり、 Itamae を開発し、実運用しているクックパッドさんがどういった運用をされているか気になりますね。
プリフィックスなしの recipe plugin は official recipe plugin として、
ある程度品質に責任を持てるレベルの方たちが作成するなどルールがあったほうが良いのかな?
試行
仕様
- toilet をインストールするだけの recipe plugin を作成
itamae-plugin-recipe-toilet
# bundle gem で gem のひな型を生成
$ bundle gem itamae-plugin-recipe-toilet
- itamae-plugin-recipe-upgrade/lib/itamae/plugin/recipe/toilet.rb を編集
package "toilet" do
action :install
end
- その他のファイルの編集内容は省略(通常の gem 作成時と同じ)
recipe plugin を install
今回は Private な Gemサーバーに公開し、そちらからインストールします。
gem server は geminabox を利用します。
詳しくはこちらの記事を参照。
Ruby | RubyKaigi2014の知見。geminabox gem で Private な Gem Server を構築 #rubykaigi
$ tree -L 2
.
┗ itamae-plugin-recipe-toilet
┣ Gemfile
┣ itamae-plugin-recipe-toilet.gemspec
┣ lib
┣ LICENSE.txt
┣ Rakefile
┗ README.md
# recipe を実装
$ cd itamae-plugin-recipe-toilet
$ rake build
# geminabox で作成したサーバーに gem を公開
$ gem inabox ./pkg/itamae-plugin-recipe-toilet-0.0.1.gem
レシピを作成
include_recipe 'toilet'
Gemfile を作成
source 'http://your_gem_server:your_port/'
gem 'itamae'
gem 'itamae-plugin-recipe-toilet'
# geminabox(private gem server) から install
$ bundle install
$ gem list | grep itamae
itamae (1.0.1)
itamae-plugin-recipe-toilet (0.0.1)
実行
$ tree -L 1
.
┣ Gemfile
┣ Gemfile.lock
┣ itamae-ubuntu.rb
┗ Vagrantfile
$ sudo bundle exec itamae local recipe.rb
$ which toilet
/usr/bin/toilet
$ toilet -v
TOIlet Copyright 2006 Sam Hocevar
Internet: <sam@hocevar.net> Version: 0.2, date:
TOIlet, along with the various TOIlet fonts and documentation, may be
freely copied and distributed.
If you use TOIlet, please send an e-mail message to <sam@hocevar.net>.
The latest version of TOIlet is available from the web site,
http://libcaca.zoy.org/toilet.html
Usage: toilet [ -hkostvSW ] [ -d fontdirectory ]
[ -f fontfile ] [ -F filter ] [ -w outputwidth ]
[ -I infocode ] [ -E format ] [ message ]
$ toilet "Itamae" -F gay
mmmmm m
# mm#mm mmm mmmmm mmm mmm
# # " # # # # " # #" #
# # m"""# # # # m"""# #""""
mm#mm "mm "mm"# # # # "mm"# "#mm"