ShinobiLayer: SoftLayer API 次の一歩: APIキーの設定無しでメタデータ情報を呼び出す方法

#はじめに
一般的に、SoftLayer APIを呼び出すためには、認証のためのAPI Keyなどを事前に準備しておく必要があります。
ただし、唯一の例外があります。それは**メタデータ情報**を呼び出す時です。下記のリンクにもあるとおり、**SoftLayer_Resource_Metadata**というServiceは、どこから呼び出しがされたかだけが重要であり、事前にAPI Keyの入手は必須ではありません。もし、slcliコマンドをダウンロードしていても、API Keyのセットアップなしで利用可能です。
http://sldn.softlayer.com/reference/services/SoftLayer_Resource_Metadata

#使用条件と嬉しいこと

使用条件は以下のとおりです。

* 実際にSoftLayerが稼動しているサーバーから実行すること
* Private経由でAPIアクセスすること（Public経由はNGです）

これを利用すれば、例えば管理コンソールなどのアクセス権がなくても、自分のサーバーがどのデータセンターで動いているかが分かります！！！

#使用方法(curl)
末尾をgetID.jsonの代わりにgetID.xmlのようにしても良いです。その場合は、json形式ではなくxml形式になります。

```text:DeviceID(物理サーバーならHardwareId、仮想サーバーならVirtualGuestId)
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getId.json
```

```text:ホスト名、ドメイン名、FQDN
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getHostname.json

# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getDomain.json

# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getFullyQualifiedDomainName.json
```

```text:Public側/Private側のPrimaryIPAddress
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getPrimaryIpAddress.json

# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getPrimaryBackendIpAddress.json
```

```text:Public側/Private側のMACAddress
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getFrontendMacAddresses.json

# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getBackendMacAddresses.json
```

```text:ルーター情報（上記のMACアドレスを使って以下のように記述）
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getRouter/06:5c:99:52:1a:60.json
```

```text:VLAN情報（上記で取得したMACアドレスを使って以下のように記述）
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getVlanIds/06:5c:99:52:1a:60.json

# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getVlans/06:5c:99:52:1a:60.json
```

```text:データセンター情報
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getDatacenterId.json

# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getDatacenter.json
```

```text:プロビジョニングの状態
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getProvisionState.json
```

```text:タグ情報
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getTags.json
```

```text:ユーザーメタ情報
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getUserMetadata.json
```

```text:サービスリソース情報
# curl https://api.service.softlayer.com/rest/v3.1/SoftLayer_Resource_Metadata/getServiceResources.json
```

# 使用方法(slcliコマンド)

繰り返しになりますが、slcliコマンドを使うにしても、metadata情報の取得に関しては事前にAPI Keyのセットアップは不要です。

```text:slcliコマンド例
# slcli metadata -h
Usage: slcli metadata [OPTIONS] PROP

  Find details about this machine

  PROP Choices
  *backend_ip
  *backend_mac
  *datacenter
  *datacenter_id
  *fqdn
  *frontend_mac
  *id
  *ip
  *network
  *provision_state
  *tags
  *user_data

  Examples :
  slcli metadata backend_ip
  slcli metadata backend_mac
  slcli metadata datacenter
  slcli metadata datacenter_id
  slcli metadata fqdn
  slcli metadata frontend_mac
  slcli metadata id
  slcli metadata ip
  slcli metadata network
  slcli metadata provision_state
  slcli metadata tags
  slcli metadata user_data

Options:
  -h, --help  Show this message and exit.

  These commands only work on devices on the backend SoftLayer network. This
  allows for self-discovery for newly provisioned resources.
```

```text:network情報の取得例
# slcli metadata network
:...............:...................:
:      name     :       value       :
:...............:...................:
: mac addresses : 06:90:31:e4:0c:90 :
:     router    :    fcr01.sng01    :
:     vlans     :        xxxx       :
:    vlan ids   :       xxxxxx      :
:...............:...................:
:...............:...................:
:      name     :       value       :
:...............:...................:
: mac addresses : 06:18:10:e0:91:17 :
:     router    :    bcr01.sng01    :
:     vlans     :        xxxx       :
:    vlan ids   :       xxxxxx      :
:...............:...................:

```