13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Itamae | recipe plugin で 板前によるトイレ設置をプラグイン化する #devops #itamae

Last updated at Posted at 2014-10-16

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 の場合、命名ルールがまちまちで統一感がなかった、
という点を顧みての規約化なのかな?と類推しています。
その他の統一によるその他のメリットとして検索しやすい、という点があります

課題?

例えば 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

geminabox_toilet.png

レシピを作成

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"

itamae_toilet_gay.png

参照

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?