ShinobiLayer: SoftLayer API 次の一歩: slcli call-apiで任意のAPIメソッドを呼び出す

#はじめに
「SoftLayer API 次の一歩: データ型オブジェクト」の続編を書こうと思っていたのですが、忙しくて執筆の時間が取れないので、閑話休題的な話をば。

* slcliコマンドぐらいは実行できる。
*  「SoftLayer API 次の一歩: データ型オブジェクト」の内容は大体分かった。
* でも、プログラマーじゃないからPythonをゴリゴリ書くのはちょっときつい。RESTを使うのも、あんな可読性が悪いもので結果の確認をしたくない。

という人を対象読者としています。多分あまり知られていないやり方ですが、超便利なのでご紹介しましょう！

<改定履歴>
*2015/01/18: 本日時点では、idではなくパラメーターを渡さないといけないようなmethod（更新処理など）にはまだ対応していないように見えます。ソース見た感じでは簡単に直せそうだけど。。。*
*2015/4/16: [Python実行時にInsecurePlatformWarningが出る場合の対応方法](http://qiita.com/testnin2/items/97ddb749879415b23e18)の内容を反映。slコマンドがgithub上の最新モジュールではslcliになることを反映。*

# slコマンドをgithub上のモジュールに最新化する
slコマンドをgithub上の最新モジュールに更新しましょう。普通はrelease版を利用するので、

```shell:最新のrelease版にupdateする方法
# pip install --upgrade Softlayer requests==2.5.3
# sl --version
v3.3.1
```

のようにしてアップグレードすることが多いですが、今回はgithub上のモジュールを取得します。**コマンド名がslからslcliに変更されていることに注意してください。**もし、再度release版に戻したい時は、`pip uninstall SoftLayer`、`pip install SoftLayer`を実行します。

```shell:github上のモジュールに最新化する方法（最新のモジュールでは、slコマンドはslcliコマンドに変更されています）
# yum install -y git
# pip install --upgrade git+git://github.com/softlayer/softlayer-python.git requests==2.5.3
# slcli --version
slcli (SoftLayer Command-line), version 4.0.0
```

# call-apiを使ってみる。
github上の最新slコマンドには**call-apiオプション**が導入されています。

```
# slcli
Usage: slcli [OPTIONS] COMMAND [ARGS]...

  SoftLayer Command-line Client

Options:
  --format [table|raw|json]  Output format
  -C, --config PATH          Config file location
  --debug [0|1|2|3]          Sets the debug noise level
  -v, --verbose              Sets the debug noise level
  --timings                  Time each API call and display after results
  --proxy TEXT               HTTP[S] proxy to be use to make API calls
  -y, --really               Confirm all prompt actions
  --fixtures                 Use fixtures instead of actually making API calls
  --version                  Show the version and exit.
  -h, --help                 Show this message and exit.

Commands:
  call-api   Call arbitrary API endpoints.
  cdn        Content Delivery Network.
  config     CLI configuration.
  dns        Domain Name System.
  firewall   Firewalls.
  globalip   Global IP addresses.
  image      Compute images.
  iscsi      iSCSI storage.
  loadbal    Load balancers.
  messaging  Message queue service.
  metadata   Find details about this machine.
  nas        Network Attached Storage.
  rwhois     Referral Whois.
  server     Hardware servers.
  setup      Edit configuration.
  snapshot   Snapshots.
  sshkey     SSH Keys.
  ssl        SSL Certificates.
  subnet     Network subnets.
  summary    Account summary.
  ticket     Support tickets.
  vlan       Network VLANs.
  vs         Virtual Servers.

  To use most commands your SoftLayer username and api_key need to be
  configured. The easiest way to do that is to use: 'slcli setup'

```

使い方は以下の書式に従います。
`slcli call-api SERVICE METHOD [OPTIONS]`
今のところ、OPTIONSとしては、

* --id
* --mask
* --limit
* --offset

が使えるようです。

#実験結果
というので、いくつか試してみましょう。

```shell:AccountサービスのgetObjectを呼び出す
# slcli call-api Account getObject
:.............................:...............................:
:                        Name : Value                         :
:.............................:...............................:
:                    lastName : XXXXXXXX                      :
:                        city : Tokyo                         :
:                  postalCode : XXX-XXXX                      :
:                  modifyDate : 2014-03-20T09:48:11-07:00     :
:       lateFeeProtectionFlag : True                          :
:                   firstName : XXX                           :
:                 companyName : XXX - XXXXXXXXX               :
:                    address1 : XX-XX, XXXXXXXXXXXXXXXXXXXXXX :
: accountManagedResourcesFlag : False                         :
:             accountStatusId : 1001                          :
:                  statusDate :                               :
:                     brandId : XXXXX                         :
:                       email : XXXX@xxx.xxx.xxxx             :
:                       state : OT                            :
:      allowedPptpVpnQuantity : 2                             :
:                     country : JP                            :
:                          id : XXXXXX                        :
:                 officePhone : 81-XX-XXXX-XXXX               :
:                  isReseller : 0                             :
:                  createDate : 2014-03-20T09:47:39-07:00     :
:      claimedTaxExemptTxFlag : False                         :
:.............................:...............................:
```
```shell:AccountサービスのgetVirtualGuestsを呼び出す（呼び出し結果は10行、mask値を利用）
# slcli call-api Account getVirtualGuests --limit=10 --mask=id,hostname
:...................:.........:
:      hostname     :    id   :
:...................:.........:
:     3488-1-vm     : 7787738 :
:     Drupal-QA     : 6978436 :
:     Svrokada01    : 4727494 :
: TK-as-member-e727 : 6201954 :
:   TK-centos64-01  : 6069184 :
: TK-docker-centos7 : 7684248 :
:      TK-rhel6     : 6405364 :
:    TK-vyatta01    : 6069170 :
:   TK-win12-tok02  : 7746886 :
:  TK-win2008r2-01  : 7409270 :
:...................:.........:
```
```shell:Virtual_GuestサービスのgetObjectを呼び出す（IDを指定）
# slcli call-api Virtual_Guest getObject --id=6069184
:..............................:......................................:
:                         Name : Value                                :
:..............................:......................................:
:                       domain : example.com                          :
:                   modifyDate : 2015-01-12T17:13:22-06:00            :
: dedicatedAccountHostOnlyFlag : False                                :
:                       maxCpu : 2                                    :
:                    maxMemory : 2048                                 :
:             primaryIpAddress : 119.XX.XX.2                          :
:             globalIdentifier : 9713c5ce-e11b-4c29-xxxx-a16ef3a34158 :
:                  maxCpuUnits : CORE                                 :
:                           id : 6069184                              :
:                    accountId : XXXXXX                               :
:                         uuid : 488dddce-3c85-234a-xxxx-5e3580c3148f :
:               metricPollDate :                                      :
:                   createDate : 2014-09-03T01:35:46-07:00            :
:                     hostname : TK-centos64-01                       :
:             lastVerifiedDate :                                      :
:          managedResourceFlag : False                                :
:      primaryBackendIpAddress : 10.XX.XXX.117                        :
:             lastPowerStateId :                                      :
:                       status : :.........:........:                 :
:                              : :    Name : Value  :                 :
:                              : :.........:........:                 :
:                              : : keyName : ACTIVE :                 :
:                              : :    name : Active :                 :
:                              : :.........:........:                 :
:     fullyQualifiedDomainName : TK-centos64-01.example.com           :
:                provisionDate : 2014-09-03T01:42:07-07:00            :
:                    startCpus : 2                                    :
:                     statusId : 1001                                 :
:..............................:......................................:
```


#最後に
ちょっと試してみるには、slcliコマンドのcall-apiは非常に便利です！早くrelease版にも組み込んでもらいたいですね。