Ohaiが割と使えるかも

最近、今話題のChefでいろいろ遊んでいます(Chefの説明はいろんなところにあふれかえっているので省略)。

Chefの構成要素の1つに、Attributeというものがあります。
Attributeとは、Chefのクライアントが実行されたときに収集されるサーバの情報(IPアドレス、OS、カーネルのバージョン等)やCookbook(の中のattributes等)で指定したパラメータの集合のことで、Attributeを利用することによってサーバの情報やあらかじめ指定しておいた条件に基づいて動的にサーバ構築を行うことができます。
例:OSに応じてインストールパッケージを変える、指定した条件に一致する場合にだけ特定の処理を実行するなど

Cookbook内で指定するパラメータ以外に、自動的に設定されるAttributeが知りたくて調べていたんですが、どうもOhaiというソフトウェアがそのあたりの情報を収集しているみたい。
ohaiはChefに組み込まれていて、Chefをインストールすると一緒にインストールされます。

どんな情報を集めているのか調べるために、ohaiを実行してみました。

# ohai
[2013-03-20T22:45:38+09:00] INFO: [inet6] no default interface, picking the first ipaddress
{
  "languages": {
    "ruby": {
      "platform": "x86_64-linux",
      "version": "1.9.3",
      "release_date": "2013-02-22",
      "target": "x86_64-redhat-linux-gnu",
      "target_cpu": "x86_64",
      "target_vendor": "redhat",
      "target_os": "linux",
      "host": "x86_64-redhat-linux-gnu",
      "host_cpu": "x86_64",
      "host_os": "linux-gnu",
      "host_vendor": "redhat",
      "bin_dir": "/usr/bin",
      "ruby_bin": "/usr/bin/ruby",
      "gems_dir": "/usr/local/share/gems",
      "gem_bin": "/usr/bin/gem"
    },
...
    "loop4": {
      "size": "0",
      "removable": "0"
    },
    "loop5": {
      "size": "0",
      "removable": "0"
    },
    "loop6": {
      "size": "0",
      "removable": "0"
    },
    "loop7": {
      "size": "0",
      "removable": "0"
    }
  }
}
(出力行でだいたい3500くらい)

多いwww
でも、どのOSで実行しても同じ情報(OSやアーキテクチャによっては空のものもあるだろうけど)、同じJSONフォーマットにしてくれるなら利用価値があるかも。

ohaiが収集する情報のカスタマイズやフィルタリングについては、Qiitaの「Chefの心臓、Ohaiのアトリビュートを他のプログラムからも拝借したい」が参考になると思います。

Chef面白いですね。もっと勉強したい。