cfengine よりも puppet がよさげ

Posted by Gosuke Miyashita Sun, 18 Mar 2007 12:33:00 GMT

I, newbie » Links Roundup 経由で puppet というシステム管理ツールを知って以来ずっと気になっていたのですが、このエントリの著者さんが OSC2007 の発表資料(PDF)で「Puppet is so sexy.」と書かれているのを見て、本気で触ってみることにしました。

puppet がどんなものかは、上記資料とか だ!日記さんのエントリ にも書かれているのですが、本家の Cfengine vs. Puppet というエントリから cfengine との違いを一部適当に意訳してみると、こんな感じです。

  • next-generation version of cfengine ということで、cfengine をベースとしながらも、より良いものを目指している。
  • リソース抽象化レイヤーにより、OS やディストリビューションの違いを意識しなくても良い。
  • タスクの実行順序を制御できる。(cfengine ではできないor難しいらしい。)
  • 設定ファイルで記述する内部言語が強力になっている。
  • type の拡張が簡単。
  • Ruby でできている。

というわけで、cfengine の導入を検討して、こんなエントリ を書いたりしてたのですが、cfengine は捨てて puppet でいこうかな、と思ってます。

emacs 用のヘルパーモード なんかも提供されているのがさらに好印象です。vim 用もあるし

それから、まだ Experimental ですが、puppetshow という Rails でできたウェブインターフェースもあるようです。

Plagger について本に書きました

Posted by Gosuke Miyashita Wed, 14 Mar 2007 13:51:21 GMT

タイトルは MASHUP++ です。その名の通り、マッシュアップを主題とした本なのですが、主に自分でマッシュアップな開発をしてみたい、という方向けの本で、自分は「マッシュアップとプラガブルなフレームワーク」をテーマに、Plagger プラグインの開発方法について書きました。

内容としては、プラグイン開発の基礎知識として、

  • 内部データ形式である Plagger::Feed と Plagger::Entry
  • フィードデータがどの様に入力、加工、出力されるのか
  • プラグインの用途と種類にはどんなものがあるのか
  • 各プラグインの関係や実行フェーズ、実行順序

といったことを解説しています。また、後半は

  • 各フェーズの実際のプラグインソースコードを引用しながらの解説
  • プラグインの雛形生成、ドキュメント、テストの書き方といったプラグイン開発の流れ

といった感じになっています。プラグインを開発してみたいけど、どこから手をつけていいのかわからない、という方に是非ご覧頂きたいです。

他にも さうなまん さん、鹿倉公維 さん、セトウナオ さん、タナカミノル さんといった .fla の執筆陣による Flash を主体としたマッシュアップ(タナカさんは今回は Flash ではないですが)や、CATWALK の三宅涼さん、澤久裕昭さんによる、これぞ正当なマッシュアップ、といった感じの PHP と JavaScript によるマッシュアップ、そして、タナカミノルさんと原央樹 さんによる、Gainerというハードウェアを使ったマッシュアップなど、バリエーション豊かなマッシュアップがソースコードつきで解説されています。必読。

Assurer 近況

Posted by Gosuke Miyashita Fri, 09 Mar 2007 17:53:42 GMT

Assurer の最近の状況など。

franck が開発に参加

Plagger コミッタでもある franck がジョインしてくれ、プラグインやパッチなどを送ってくれたり、新しいアイデアを提案/実装してくれたりしてます。この週末も素敵な機能を実装してくれるみたいです。

Notify フェーズの追加

Notify フェーズを追加して、Notify::IRC を実装してみました。ほとんど Plagger からのパクリです。

Kwalify によるコンフィグバリデーション

Assurer::ConfigLoader に、Kwalify によるコンフィグバリデーション処理が追加されました。実行時に設定ファイルのミスをお知らせしてくれます。

プラグインの場合は、当然プラグイン毎に設定内容が異なるわけですが、この辺りもちゃんと対応しています。

シェルモードのブラッシュアップ

$ assurer.pl -c config.yaml --role=web

といった形で、シェルモード起動時に、ターゲットとなるロールを指定できるのですが、機能追加により、

assurer> !on app1.foo.com app2.foo.com do uptime
assurer> !on /.*.foo.com/ do uptime
assurer> !with web db do uptime
assurer> !with /web|mail/ do uptime

といった形で、シェルモード中にもターゲットホストやロールが指定できるようになっています。正規表現も使えます。

また、シェルモードからもテストが実行できるようになっています。こんな感じで。

assurer> !test SSH on app1.foo.com
assurer> !test SSH on /.*.foo.com/
assurer> !test SSH with web
assurer> !test SSH with /web|mail/ 

並列度のコントロールと分散処理

テストの実行は assurer_test.pl を POE::Wheel::Run で起動することにより、並列実行させていたのですが、POE::Component::JobQueue を併用することにより、並列度をコントロールできるようにしました。

また、

exec_on:
  - host: localhost
    priority: 3
  - host: host0.example.com
    priority: 2
  - host: host1.example.cm
    priority: 1

といった設定を行うことにより、複数のマシンで分散してテストを行う、ということができるようになってます。priority は今のところ設定しても意味はなく、ラウンドロビンでテストジョブを割り当ててるのですが、今後は priority に応じて割りてるジョブの数を調整したり、各マシンの負荷状況を見て調整したり、といったことができるようにしたいと考えています。

Test::WWW::Mechanize プラグイン

Test::WWW::Mechanize をつかったテストも組み込めるようにしました。

まあ、こんな感じです。あまり詳しく書くと YAPC で話すネタがなくなるので、この辺で。

Older posts: 1 2