4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-12-13

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

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?