2010年12月24日金曜日

Rackspace Cloud導入記その8(APIを使う)

RackspaceがCloudkickを買収して少し楽しみな感じになってきましたね。
そして私は、Rackspaceを使っていた事をすっかり忘れていました。
Rackspaceへの興味はうすれていますが、APIくらいは使ってみよう!
そんな訳でCloudServersのRubyインターフェースAPIについて書きたいと思います。
ま、そうは言ってもREADMEに書かれている内容をそのまま実行しただけです(汗)

※APIを使用する為にはAPI keyとユーザー名が必要となります。
API keyの確認方法はこちらに記載しています。

まずは環境の準備
ついでにテスト環境のRubyとGemのバージョンをあげています。

Rubyを1.8.7へ
# cd /usr/local/src/
# cd ruby-1.8.7/i386/
# rpm -Uvh ruby-libs-1.8.7.249-4.i386.rpm ¥
ruby-devel-1.8.7.249-4.i386.rpm ¥
ruby-rdoc-1.8.7.249-4.i386.rpm ¥
ruby-1.8.7.249-4.i386.rpm ¥
ruby-irb-1.8.7.249-4.i386.rpm

Gemを1.3.7へ Gemが入ってない方はインストールして下さい。RubyGems
# gem update --system
# gem -v
1.3.7

GemにGithubを登録するとAPIをインストールできます
# gem sources -a http://gems.github.comhttp://gems.github.com added to sources
# gem install cloudservers
Building native extensions.  This could take a while...
Successfully installed json-1.4.6
Successfully installed cloudservers-0.3.0
2 gems installed
Installing ri documentation for json-1.4.6...
Installing ri documentation for cloudservers-0.3.0...
Installing RDoc documentation for json-1.4.6...
Installing RDoc documentation for cloudservers-0.3.0...

ユーザーoko_changになって試してみます。
# su - oko_chang

動作確認程度なのでirbで行います
#irbを実行
$ irb

#rubygemとcloudserversライブラリを読み込みます
> require 'rubygems'
=> true
> require 'cloudservers'
=> true

CloudServers::Connectionクラスのオブジェクトを作ります
#オブジェクトの生成(ログイン)にはusernameとapi_keyを指定する事が必須です
> cs = CloudServers::Connection.new(:username => 'oko_chang', :api_key => '********')
=> #

#自分の全サーバーをリスト表示させます
> cs.servers
=> [{:name=>"develop-server", :id=>272817}]

#特定サーバーの名前を表示させます
> server = cs.server(272817)
> server.name
=> "develop-server"

#サーバーのタイプを表示させます
> server.flavor.name
=> "256 server"
> server.image.name
=> "CentOS 5.5"

#サーバーを再起動させます
> server.reboot
=> true

新しいサーバーを起動さるイメージを表示
> image = cs.get_image(51)
=> #
> image.name
=> "CentOS 5.5"

#新しいサーバーのスペックを表示
> flavor = cs.get_flavor(1)
=> #
> flavor.name
=> "256 server"

#新しいサーバを起動
> newserver = cs.create_server(:name => "New Server", :imageId => image.id, :flavorId => flavor.id)
=> #["184.106.204.113"], :private=>["10.179.101.68"]},........, @flavorId=1>
> newserver.status
=> "BUILD"
> newserver.progress
=> 0
> newserver.adminPass
=> "NewServerJ347qTcfL"
> newserver.refresh
=> true
> newserver.progress
=> 100

#起動したサーバを削除
> newserver.delete!
=> true

以上で簡単なサーバの起動と停止を行う事が出来ました。
思ったよりも良い感じですね。ちょっと工夫をしたら色々な事に使えそうです。
さて、今年はこれが最後の更新となると思います。
もし、このブログを見た方は良い年末と年始をお過ごし下さい。
あ、そだそだ。メリークリスマス・イヴ。