SoftLayerエンジニアの常田です。

本当は別のことを書いていたのですがリファレンスを見ていて見つけたのでメモしておきます。

ユーザデータ

ユーザデータとは

サーバには、「ユーザデータ(UserData)」と呼ばれるテキスト情報を付与することが出来ます。新規にサーバをオーダする際に入れるテキストボックスがあるのでご存じの方もいるかと思います。これはサーバの内部に設定するものではなく、SoftLayerの管理側で設定することが出来ます。この機能を利用することでサーバに直接ログインせずに「テキスト情報」を受け渡しすることが出来ます。

ユーザデータの利用例

例えば、Cronで毎日バックアップを実施するスクリプトが動いていたとします。この処理の中でこの「ユーザデータ」の値を参照してバックアップの処理を変えるように作っておきます。
こうしておくと、外部からサーバの設定を変えるのではなくてこのサーバの「ユーザデータ」を変更することで結果的にバックアップの動作に影響を与える事ができます。

設定と取得

はじめに

ユーザデータが設定できる場所

  • 初期プロビジョニング実行時の引数
  • API経由経由での登録(今回の内容)

残念なことに、ユーザデータを簡単に編集する機能はありません。(本当は管理画面から簡単に変えれると嬉しいのですが)したがってAPIを利用して設定をします。今回もpython-softlayerを利用します。

データの設定

初めにサーバのidを取得します。

>>> print client['Account'].getVirtualGuests(mask='id,hostname')
[{'hostname': 'sample', 'id': 8436747}]

引き渡す情報は Array形式で付ける必要があるので以下のように設定を行います。この場合には、”test”という文字を記録しています。

>>> list = ["test"]
>>> client['Virtual_Guest'].setUserMetadata(list,id=8436747)
True
>>> pp.pprint(client['Virtual_Guest'].getUserData(id=8436747))
[{   'type': {   'keyname': 'USER_DATA', 'name': 'User Data'}, 'value': 'test'}]

残念ながらPythonのリスト形式等で引き渡しても1つのデータしか渡せません。また {‘hostname’:’sample’ }とリスト型で渡した場合にもvalueの’sample’が登録されます。

データの取得

今回登録したサーバ(id=8436747)上にログインをしてデータを取得してみます。

root@sample:~# curl https://api.service.softlayer.com/rest/v3/SoftLayer_Resource_Metadata/UserMetadata.txt
test

Curlを利用すれば簡単に取得できます。
もちろんslcliコマンドや今回のgetUserData()を利用しても取得は可能です。

Tips

1つのデータ項目しか無いのでこの中の文字を適当に “hostname=abcd, domain=hogehoge.com “のように引き渡してあとは受け取った側で文字列処理して利用するのが良いでしょう。

まとめ

APIを調べるまでサーバオーダー後に変更できることを知りませんでした。網羅的なマニュアルが早く欲しいですね。
このユーザデータは色々応用が効きますのでシステムを構築する際にこういった機能が有るということをおぼえておくと良いかと思います。