ohaiとは
chefをインストールするとohaiという
サーバの情報をよしなに取得してきてくれる超便利ツールがある。
使い方はとても簡単で
$ ohai
これだけでohaiが実行された環境の情報をいろいろ取得し、json形式で表示してくれる。
まぁこれだけをいきなり実行しても出力されたjsonでコンソールが埋まっちゃうので、
いったんohai > ohai.json
みたいな感じで適当なテキストファイルに落としちゃって
どんな情報がとれるのかざっくり見てみたらいいと思う。
ohaiの7系だとrequire_pluginが使えない
で、gem install chef
を実行すると
今は以下のバージョンのライブラリがインストールされる。
$ gem list chef (11.12.4) ohai (7.0.4)
つまり現状ohaiは7系がインストールされるようになっているのだが、 いろんなブログとかにあるohaiライブラリの使い方はほとんどが6系を前提としているので 紹介されている使い方がそのままでは使えない。
というかohaiのコードを読んだら、 何とか6系との後方互換性を保とうとしているっぽいんだが、私が実際にコードを走らせてみたら 動かなくて使えねーじゃんって気づいた。
例えばこんなコード(test.rb)を動かしてみた。
require "ohai" oh = Ohai::System.new oh.require_plugin("os") p oh[:os]
すると次のようなエラーをはく。
$ ruby test.rb /Users/kimikimi714/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/ohai-7.0.4/lib/ohai/system.rb:138:in 'require_plugin': Can not find a plugin for dependency os (Ohai::Exceptions::DependencyNotFound) from test.rb:5:in '<main>'
というわけで上記のコードを次のように変更するとよい。
require "ohai" oh = Ohai::System.new a = oh.all_plugins("os") a.each do |name| p name.class end p oh[:os]
出力結果
$ ruby test.rb Ohai::NamedPlugin::OS "darwin"
[#OHAI-553] require_plugin exception on Rubinius - Opscode Open Source Ticket Tracking
として報告済みのバグなんだけども、require_plugin
の代わりにall_plugins
を使えばいいので、
優先度(Priority)が低い(Minor)んだろう。
# # Below APIs are from V6. # Make sure that you are not breaking backwards compatibility # if you are changing any of the APIs below. # def require_plugin(plugin_ref, force=false)
になっていて一番最初にrequire_pluginがあるので、 別に私は後方互換性を壊すようなことをやってないけど、使えなくなるつもりでいてもいいのかな。
ちなみに修正したテストコードのall_plugins("os")
は引数を取っちゃえばohaiで使える
すべてのプラグインを読み込むので若干重い。ただこの後にa.each do |name|
というので
ためしにどんなプラグインが読み込まれるのか出力させるようにしてあるので、それを見たら
引数に何を入れればいいかが分かると思う。
直接ohaiライブラリのコード読んでもいいけど手間だし時間がかかる。
記事書くにあたって見て回ったリンク
- About Ohai — Chef Docs
- opscode/ohai · GitHub
- [#OHAI-553] require_plugin exception on Rubinius - Opscode Open Source Ticket Tracking
- ohaiでOS/システム情報を解析しやすい形で取得する
- Chef | Ohaiでサーバー情報の収集 - tbpg’s programming memo
- ohaiを使ってサーバの情報をプログラムで扱おう - インフラエンジニアway - Powered by HEARTBEATS
- Chefの心臓、Ohaiのアトリビュートを他のプログラムからも拝借したい - Qiita