RubyからSoftLayerを操作する（その１）

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


## 準備

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


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

という方は、ブラウザからSoftLayer管理画面にログインし、
Accountをクリックして下さい。
API KeyのGenerateをクリックすると、APIキーが生成されます。

![スクリーンショット 2014-11-06 16.06.46.png](https://qiita-image-store.s3.amazonaws.com/0/60109/3addcd20-c8f4-fbd8-316e-da6c1d3164f3.png)

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

```
　$ gem install softlayer_api
```

以上で準備は完了です。


## アカウント情報を表示

RubyからSoftLayerを操作するには、
SoftLayer::Serviceインスタンスから実行します。

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


```ruby: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メソッドで、アカウント情報を取得しました。


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

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

```ruby: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を使用します。

```ruby: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から確認してみましょう。

```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

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

RubyからSoftLayerを操作する（その２）
http://qiita.com/rina0521/items/a039705243663ed0ac51