Edited at

RubyからSoftLayerを操作する(その1)

More than 3 years have passed since last update.

RubyからSoftLayerをアレコレ操作してみようとおもいます。


準備

API経由でSoftLayerを操作する場合、通常のパスワードではなく、APIキーというものが必要になります。

APIキーって何?もってないよ?

という方は、ブラウザからSoftLayer管理画面にログインし、

Accountをクリックして下さい。

API KeyのGenerateをクリックすると、APIキーが生成されます。

スクリーンショット 2014-11-06 16.06.46.png

次に、gemで、softlayer_apiをインストールしてください。

 $ gem install softlayer_api

以上で準備は完了です。


アカウント情報を表示

RubyからSoftLayerを操作するには、

SoftLayer::Serviceインスタンスから実行します。

まずは一番基本的なものとして、自分のアカウント情報を表示してみます。


account_info.rb


require 'softlayer_api'

client = SoftLayer::Client.new(
:username => "【ユーザ名】",
:api_key => "【APIキー】"
)

account_service = client.service_named("SoftLayer_Account")

account_info = account_service.getObject

p account_info


ユーザー名とAPIキーは、自身のアカウント情報を入力してください

実行すると・・・・

$ ruby account_info.rb

{"accountManagedResourcesFlag"=>false,
"accountStatusId"=>1001,
"address1"=>

(省略)

"officePhone"=>"XX-XXXX-XXXX",
"postalCode"=>"XXX-XXXX",
"state"=>"OT",
"statusDate"=>""}

※出力情報は、マスクして、インデントを追加しています

このように、自身のアカウント情報をJSON形式で取得することができました。

Clientでユーザ名やAPIキーを入れて、

service_namedで、利用するサービスを指定します。

getObjectメソッドで、アカウント情報を取得しました。


仮想サーバのリストを表示

では次に、アカウントに紐付く仮想サーバの情報を取得してみます。


vmlist_info.rb


require 'softlayer_api'

client = SoftLayer::Client.new(
:username => "【ユーザ名】",
:api_key => "【APIキー】"
)

account_service = client.service_named("SoftLayer_Account")

vmlist_info = account_service.getVirtualGuests

p vmlist_info


$ ruby vmlist_info.rb

[
{"accountId"=>XXXXXXX,
"createDate"=>"2014-XX-XXTXX:XX:XX+09:00",
"dedicatedAccountHostOnlyFlag"=>false,
"domain"=>"XXX.XXXX",
"fullyQualifiedDomainName"=>"TestServer.XXXX.XXXX",

(省略)

"primaryBackendIpAddress"=>"XX.XX.XXX.XX",
"primaryIpAddress"=>"XXX.XX.XXX.XX"
},
{
"accountId"=>372872,
"createDate"=>"2014-YY-YYTYY:YY:YY+09:00",
"dedicatedAccountHostOnlyFlag"=>false,
"domain"=>"YYY.YYYY",

(省略)

"primaryBackendIpAddress"=>"ZZ.ZZ.ZZZ.ZZ",
"primaryIpAddress"=>"ZZZ.ZZ.ZZZ.ZZ"
}
]

アカウントに紐付く仮想サーバの情報が返ってきました。

ここで使用したサービスは、Accountサービス、

使用したメソッドは、getVirtualGuestsです。

最初のアカウント情報表示のプログラムから、

使用するメソッドを変更することにより、取得できる情報が変わりました。

「あれ?仮想サーバの情報をとるなら、Virtual_Guestサービスとか

 そんなかんじの使わないの?」

と思われたかもしれません。

Accountサービスは、与えたユーザアカウント情報に紐付く情報をとってくる

ものになるので、広くたくさんの情報をとってくることができます。

また、Accountサービスにはもう一つ特徴があり、

情報取得or操作対象のIDを指定する必要がないということがあり、

今回はこちらを使いました。


指定した仮想サーバの電源をOFFにする

最後に、さきほど取得した仮想サーバの「id」を使用して

Rubyから仮想サーバの電源をOFFしてみましょう。

仮想サーバの操作をする場合は、Virtual_Guestを使用します。


powerOffVm.rb


require 'softlayer_api'

client = SoftLayer::Client.new(
:username => "【ユーザ名】",
:api_key => "【APIキー】"
)

vm_service = client.service_named("SoftLayer_Virtual_Guest")

power_off = vm_service.object_with_id(【仮想サーバのid).powerOff

p power_off


object_with_idに、電源を落としたい仮想サーバのidを入力します。

$ ruby powerOffVm.rb

true

これで、指定された仮想サーバの電源は落とされました。

では、電源状態の確認も、rubyから確認してみましょう。


powerStatus.rb


require 'softlayer_api'

client = SoftLayer::Client.new(
:username => "【ユーザ名】",
:api_key => "【APIキー】"
)

vm_service = client.service_named("SoftLayer_Virtual_Guest")
power_status = vm_service.object_with_id(【仮想サーバのID).getPowerState

p power_status


使うメソッドは、getPowerStateになります。

$ ruby powerStatus.rb

{"keyName"=>"HALTED", "name"=>"Halted"}

HALTEDと表示されていれば、電源はOFF状態です。

(RUNNNINGは、ON状態)

無事、電源はOFFになっているようです。

SoftLayerで使えるサービスやメソッドがもっと知りたい、

という方はこちらをご参照下さい。

http://sldn.softlayer.com/reference/services/SoftLayer_Account

以上でその1は終了です。

次に書くその2では、インスタンス作成なども書いてみようと思います。

RubyからSoftLayerを操作する(その2)

http://qiita.com/rina0521/items/a039705243663ed0ac51