RubyからSoftLayerをアレコレ操作してみようとおもいます。
準備
API経由でSoftLayerを操作する場合、通常のパスワードではなく、APIキーというものが必要になります。
APIキーって何?もってないよ?
という方は、ブラウザからSoftLayer管理画面にログインし、
Accountをクリックして下さい。
API KeyのGenerateをクリックすると、APIキーが生成されます。
次に、gemで、softlayer_apiをインストールしてください。
$ gem install softlayer_api
以上で準備は完了です。
アカウント情報を表示
RubyからSoftLayerを操作するには、
SoftLayer::Serviceインスタンスから実行します。
まずは一番基本的なものとして、自分のアカウント情報を表示してみます。
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メソッドで、アカウント情報を取得しました。
仮想サーバのリストを表示
では次に、アカウントに紐付く仮想サーバの情報を取得してみます。
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を使用します。
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から確認してみましょう。
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