Rubyでコマンドラインから与えられたオプションで仮想マシンを管理するでござる。
Ruby逆引きレシピAdvent Calendarの5日目ということで、実に1年以上ぶりにBlog書きますよ。
このレシピ本には結構お世話になっていて、今でも結構見てます。
勿論実際コード書くときはドキュメントやgoogle様を併用するわけですが、この本をパラパラめくってると、色々インスピレーションが湧いていいですね。
で、お題ですが今回はインフラエンジニアらしく、KVMを管理するlibvirtのAPIをRubyから叩けるコマンドラインスクリプトを作りたいと思います。
ターゲットページは #058 『コマンドラインから与えられたオプションを解析したい』です。
今回の環境はこんな感じ
OS: Redhat Enterprise Linux 6.0 2.6.32-71.el6.x86_64 ruby: 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux] ruby-libvirt: 0.2.0-1.el6.x86_64
ruby-libvirtについては、libvirt.org/rubyから git clone た後ビルドして各自こさえてくださいね。
あ、余談ですがRHELじゃなくてFedora14だと既にリポジトリにありますので
yum install ruby-libvirt.x86_64
Fedoraな方はコレでもオッケーです。
ところでlibvirtといえば、pythonなわけで、コマンドラインから管理するなら virsh という超絶便利なshellすらあるのになんでわざわざrubyで超機能限定版を再実装するのかというと、それは深い意味があるようでないようで、実はコマンドラインから扱いたいんじゃなくてRailsのcontroller的な所に処理の部分だけ持ってって、 /vm_name/power_on みたいなURIに引数付けて Ajax で post 飛ばすと仮想マシンがガーっと立ち上がったり新規に作成できたり電源落とせたりとか、まぁ要は某石狩データセンターなところのVPSの管理画面みたいなのが作れます、というか既に作ったんだけど、それネタにしたら全然レシピ本と関係ないし、やべぇ俺プログラマーじゃねーし、とか思ったから簡単そうなので行こうぜ、という事でコレを選んでみたわけだが、アレこれ意外とスゲー使えるじゃん的な。
さて、前置きが揃ったところで早速レシピを参考にちょちょっと書いてみました。
なんかエラー処理が甘い感じだし、ミョーに無駄が多い気もしますが、まぁいいでしょう。
こう言ったちょっとしたものを15分もかければ作れてしまうのがRubyのいい所ですね。
vm_power.rb
#!/usr/bin/ruby require 'libvirt' require 'optparse' OPTIONS = { } ARGV.options do |opts| opts.on("-r", "--remote <HOST NAME>", "libvirtd host, ex: root@localhost.localdomain") {|host| OPTIONS[:host] = host } opts.on("--on", "--on <VM NAME>", "VM Power ON") {|p_on| OPTIONS[:p_on] = p_on } opts.on("--off", "--off <VM NAME>", "VM Shutdown") {|p_off| OPTIONS[:p_off] = p_off } opts.parse! end if OPTIONS[:host] then conn = Libvirt::open("qemu+tcp://#{OPTIONS[:host]}/system") if OPTIONS[:p_on] then begin vm = conn.lookup_domain_by_name(OPTIONS[:p_on]) vm.create rescue => ex puts "Error #{ex.message}" else puts "Power ON #{OPTIONS[:p_on]}" ensure unless conn.nil? conn.close end end elsif OPTIONS[:p_off] then begin vm = conn.lookup_domain_by_name(OPTIONS[:p_off]) vm.shutdown rescue => ex puts "Error: #{ex.message}" else puts "Power OFF: #{OPTIONS[:p_off]}" ensure unless conn.nil? conn.close end end else puts "Help: vm_power.rb -h" end end
使い方はこんな感じですね。
# ./vm_power.rb -h Usage: vm_power [options] -r, --remotelibvirtd host, ex: root@localhost.localdomain --on VM Power ON --off VM Shutdown # ./vm_power.rb -r root@hoge.localdomain --on vm1 Power ON vm1 # ./vm_power.rb -r root@hoge.localdomain --off vm1 Power OFF: vm1
基本的な考え方は、 OptionParser#on でオプションを登録して、それに対応する動きを書く感じになるんですね。
で、最後に OptionParser#parse! メソッドでそのオプションに該当する動作を実行するみたいです。
ぶっちゃけそこでは、ほとんど何もしてないんですが。
というか最後の怒涛のif文はどう見ても綺麗じゃないですね、本当にありがとうございました。
Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)
- 作者: 島田浩二,設樂洋爾,村田賢太,前田智樹,谷口文威
- 出版社/メーカー: 翔泳社
- 発売日: 2009/07/25
- メディア: 単行本(ソフトカバー)
- 購入: 16人 クリック: 349回
- この商品を含むブログ (77件) を見る
VPSを試して見てる
急に固定IPのサーバが欲しくなって、VPSをレンタルしてみました。
http://vpsstock.jp/
プランはメモリ 256MB/HDD 10GBのS256プラン。
現在絶賛トライアル中。
Xen系で月額1,980円は安いほうですね。
Virtuozzo系のVPSならもっと安く借りれるのですが、SWAP領域が取れないため、メモリ使いきった時点で停まるか落ちるかしてしまうので、やめておきました。
『国内初XenベースVPS』と言う触れ込みですが、提供OSのラインナップを見るに、多分Citrix XenServer5.xですね。
OSはCentOS5.2を選択。
トラブった。
まずですね、提供開始初日からトラブリました!!!111
どうやら、割り振られたIPがなんかとバッティングしてたみたい。
いきなり接続出来ないなんて…!
数分お置きに、たまーに繋がる感じ。
しかも、80番で見に行くとS/Wの管理画面出てくるし、オイコラw
寝る前にサポートにメール投げて見た。
すると翌朝返信が来て、お昼には対処してくれました。
つっても仮想マシン消して新しく作り直したらしいですが。
まぁ、サポートは良い(≒速い)方なんじゃないでしょうか。
気を取り直して弄くり出します。
んだば軽くスペックを見て行きましょう。
[root@centos52 ~]# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 15 model name : Intel(R) Pentium(R) Dual CPU E2220 @ 2.40GHz stepping : 13 cpu MHz : 2400.082 cache size : 1024 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 10 wp : yes flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl est tm2 cx16 xtpr lahf_lm bogomips : 6005.09
成程、ペンDですね。
と言うことは、Intel-VTは非対応ですね。完全仮想する訳ではないので、あまり気にしなくてもいいのかもしれません。
Ping飛ばして見る。
国内だけあって、やっぱ速い。
10msくらいで到達してる。
初期セキュリティ
ちなみに最初サーバを発行してもらうタイミングでは、iptablesを使ってセキュリティを保っています。
SSH以外は全て閉まっています。また、SSHに関してもポート番号は変えてありますね。
root権限とyum
root権限も勿論あるので、yum updateも可能です。
ただし、CentOS5.2で単にupdateしてしまうと、新しいカーネルと共にCentOS5.3に上がってしまうので注意。
また、カーネルが上がると言うことは、reboot必須な訳ですが、その辺を弄れる管理マネージャ的なものはVPS Stockでは提供されていないので、SSHから運頼みのrebootになります。
一応、サポートフォーラムに再起動についての質問が上がっていましたが、
現状の場合、sales@triglav.jp 宛にご依頼をいただければ、こちらで対応させていただきます。
との事。
また、OSのバージョンも上がってしまうため、サポート対象外になる可能性があります、というか非常に高いので、その辺は自己責任でガンバレ。
Ruby@開発環境
で、今回はrubyを使いたかったので、環境を整えて行ったのですが、一点ハマリどころがありました。
要はメモリ不足です。
まぁなんと
yum install rubygems gem upudate --system
が通りません。
CentOSの標準リポジトリだと、rubygemsのバージョンは0.9.4あたり。
Bulkupdateとなりますので、メモリ展開が追いつかなく、いつまで経っても終わりません。
あちゃー。
よってrubygemsは最新版を取ってきて、checkinstallでRPM化してから使うことにしました。
その後はgem updateが普通に通るようになります。
これはVPS側が悪いわけじゃなくて、rubygems1.1(1.0?)辺りで解消された仕様のようなので、どうしよも無いですね。
とりあえずこんな感じ。
『僕』が旅に出る理由
そうそう、今回のOSCのテーマとして「僕らが旅に出る理由」と言うのがあったので、帰りの飛行機でまどろみながらも色々考えて見ました。
楽しいから
北海道も勿論ですが、今まで島根だとか仙台だとか色々お邪魔していますが、何でわざわざ行くかっていうと、最終的には楽しいから、なんですよ。
他にももっと、色々な絡みとか、政治的なアレもあるような気もしますが、個人としてはそれに尽きるんですよね。
いろんな人に会える
で、何が楽しいのかと言うと、きっと一番でかいのは『いろんな人に会える』から。
別に僕は景色だとか、歴史的建造物を見に行ってる訳ではない(# 勿論見れれば見たいし、好きですよ!)ので、行っても人っ子一人いなかったら寂しいかも。
初めて会う人、そうで無い人、地元を盛り上げようと頑張ってる人、これからこの業界に入ってこようとしてる人、いろんな人に出会える、話せる。
それって凄く楽しくて幸せなことだと思うのですよ。
結論
普段はディスプレイとキーボード、機器類とにらめっこしてる僕らエンジニア。
それゆえにリアルにこだわるのは不思議なものですが、それが楽しいのだからしょうがないです。はい。
だから行く。これからも行く。仕事が変わってしまっても行く。
それでいいんじゃないかなー、と思った。まる。
反省点
講演に関しては個人的に反省点が沢山あり、という感じ。
具体的には…
・テーマのターゲット
・話す速さやテンション
・まとめかた
このあたりですね、精進します。
あと一部で写真及びその掲載について軽く話題が上がりましたが、個人的なスタンスとしては掲載全然おっけーです。
ただ、写りたくない、お忍びなんです、という意見は理解できるので、標準的なガイドラインがあるといいかもですね。
これに関しては、すもけさんが凄くいい記事を書いているので、運営とかに興味ある方は是非読んで見ると良いと思います。
[-*煙猴*-]: イベント時の映像配信・写真撮影について
さて、次はいついきますかねー。
OSC2009 Hokkaidoいってきた。
オープンソースカンファレンス2009 Hokkaido - 行くしかないっしょ?!
LOCAL | Leading Organization of Community Activity for LOCAL
と、言う事でOSC-do2009いってきましたよ。
今年二回目の北海道ですね。
やっぱ北海道楽しいです、もう大好き。
まずはまたまた講師をさせて頂いたので資料をば。
今回は主にXenを実際に運用して行く際のTipsですね。
具体的には自動でゲストマシンをプロビジョニングするだとか、ネットワーク構成をどうしたら良い?と、言うことについてです。
ちょっと詰め込みすぎたかなー、という感はありますが。
第9回 仮想化友の会勉強会いってきた
遅くなったけど、木曜日に第9回仮想化友の会勉強会いってきたよ。
いつも10〜20人くらいなのに、今回は40人とか集まった罠。
とりあえず、メモ貼っつけときます。
2009/05/28 第9回 仮想化友の会勉強会@日本RedHat
※ 一応、RedHat社の総意/公式見解ではないよ、って事でひとつ。
Virtio
※ 要点だけ。詳しくは資料みるよろし
- Zero-copy I/Oを実装するためのフレームワーク
- 共有メモリにオペレーション(リクエスト)があって、I/O命令を実行
- トラップ多くなる → どんどん遅くなる
- それ、直接デバイスに送ったり、必要ならエミュレーションとかすればよくね
- Linux側で、仮想ソフト用の口を用意しておくから、後は各自頑張って → それがVirtio
※ たぶんAPIちっくなもの?
- virtio_ring
- ゲストとホストの共有ページを利用したリングバッファを提供
- バッファが共有ページの上に乗る
- virtio_console
- コンソールは割り込み処理が多いので、準仮想化する意義がある!
- ポイント
- 共有メモリ使うから早いよ
- それを実装するのはvirtioだよ
ロードマップ
- For Servers
- For Desktop
Q&A
- KVMのアドバンテージ
- 価格
- VMwareよりは高くできない
- ライセンス形態も検討中 → MSの様な形態も検討中
- 管理ツールのグレード分け
- 検討中
- oVirtはどうなるのか
- 捨てた訳ではない
- 管理ツールとして、段々上記製品に組み込んでいく
こんな感じです。
間違えて思えてる所もあるような気がするので、まぁ参考程度に。
各種資料は、こちらから。
http://sites.google.com/site/kasotomo/
Mac欲しいけど金ないからLinuxで我慢するでござるの巻
そのまんま。
Mac欲しいけどお金ないです。
つーか、Objective-Cの為だけに買うのは正直負けた気がするので、UIをそれっぽくして我慢することにしました。
これぞLifeHackですね。
iTunesっぽいあれ。
結論:
30分位グリグリいじった挙句、Exposeだけ有効にしてデフォルトに戻した。
Windows 7 RC をThinkPadにインストールした
勢いあまってThinkPad X61にWindows 7 RC x64インストールしてみました。
今のところ普通に使えています。
ぶっちゃけ、適当なターミナルソフトとgvim、LimeChatが使えれば何でもいいのですけどね。
一応Aeroも有効になります。
MtronのRead200MB/Write120MBモデルで使っていますが、今のところ快適。
ただし、XPよりももっさくなった感は否めませんね。
グラフィック以外はまぁそこそこ高めなスペコーですね。
まぁまぁ快適です。
WindowsでもExpose。
これ便利なんですよ、マジで。
もともともVista用のソフトですが、7でも使えるようです。
残念ながら、Aero用のライブラリを使ってるようで、XPや非AeroのVistaでは動きませんが。
http://www.nazspace.com/wp/2007/05/03/expose-for-vista/