• Showing Page History #100806

lxcficon.jpg LXCFのREST-API

元のページに戻る

LXCFのREST-API

REST APIは、WebのプロトコルHTTPを使ったネットワーク経由のインタフェースです。
次のような特徴を持ちます。

- ステートレスなクライアント/サーバプロトコル
- すべてのリソースに適用できる操作セット
- すべてのリソースは URI で表される一意的なアドレスを持つ
- アプリケーションの情報と状態遷移の両方を扱う

LXCFのREST APIは、主にHTTPのPOSTとGETの操作を使用します。
また、APIの発行時にはパスワードを付けてPOSTを行います。パスワードは空にすることができます。

1. Browseable REST API

LXCFのAPI操作は、HTTPのPOST操作とGET操作を使用します。
POST操作でAPIの発行をします。
GET操作では、POST操作のためのhtmlを返します。

curlのようなネットワークツールを使用する場合には、POST操作だけでAPIを操作できます。
たとえば、コンテナの一覧を表示するlistは以下のようにします。

POST操作

$ curl -F " passwd='' "  http://アドレス:ポート/lxcfv1/list

しかし、FireFoxのようなブラウザでもLXCFの操作が可能になります。
ブラウザでアドレスバーに、REST APIを入力してEnterキーを押すと、GETが発行され、POST操作のための画面が表示されます。
アドレスバーには、"http://アドレス:ポート/lxcfv1/list"と入力します。

lxcf-list-get.jpg
この画面上でパスワードを入力して、ボタンを押すと、アドレスバーに入力したAPIが発行されます。

lxcf-list-post.jpg
簡単なGUIのように、ブラウザだけでLXCFを操作できます。

このようなREST APIを、ここでは「Browseable REST API」と呼びます。

2. Browseable REST APIサービスの起動

Browseable REST APIは、デフォルトでは無効になっています。
Browseable REST APIを有効にするには、lxcf-apiサービスを起動する必要があります。
systemdまたはupstartのlxcf-apiサービスは、"lxcf api enable"コマンドで有効になります。

# lxcf api enable

また、Browseable REST APIのアドレスとポート番号は、/etc/lxcf/lxcf.confで定義します。
初期値はlocalhostと8080が設定されています。

#
# IP address and port for REST API
#
[rest_api]
ipaddr=localhost
port=8080

localhostが設定されていると、外部からはアクセスできません。
外部から接続するには、接続可能なIPアドレスかドメイン名を設定する必要があります。

一度enabledにすれば、システムをrebootしてもenabledのままです。
Browseable REST APIをdisabledにするには、"lxcf api disable"コマンドを使います。

# lxcf api disable

3. Browseable REST APIの認証

Browseable REST APIのパスワードは以下のように"lxcf api-passwd"コマンドで設定します。

# lxcf api-passwd
New password: 
Retype new password: 

エンターキーだけを押すと、パスワードは空になります。

4. Browseable REST API リクエストの送信

LXCFのREST APIは、主にHTTPのPOSTとGETの操作を使用します。
また、APIの発行時にはパスワードを付けてPOSTを行います。パスワードは空にすることもできます。
REST APIを発行するときのURLのパスでAPIは規定されます。
URLは以下のような形式です。

 http://アドレス:ポート番号/lxcfv1/APIのパス

APIのパスは、lxcfコマンドで実行するときの空白を'/'に変えたものを指定します。
たとえば、a-srvというコンテナを作るコマンドは以下です。

 # lxcf sysgen a-srv

これと同じ指定をREST APIで行う場合は以下です。

 http://アドレス:ポート番号/lxcfv1/sysgen/a-srv

5. Browseable REST APIのデータ形式

Brouseable REST APIの返すデータ形式は以下のような形式です。

<html>
<head>
htmlヘッド情報
</head>
<body>
<pre>
  status=ステータス番号
  返りメッセージ
</pre>
POST用html
</body>
</html>

ほとんどは、POST操作用のフォームを表示するためのHTML情報です。
大事なのは、その中の以下です。

  status=ステータス番号
  返りメッセージ

ステータス番号は、正常ならば0が設定されています。
それ以外の値はエラーを示します。
帰りメッセージは、実行結果のメッセージが表示されます。

たとえば、次はlistのAPIの結果です。

<html>
<head><title>LXCF API</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
</head>
<body>
<pre>
status=0
Name		Mode    	State	  Autostart    Path
-------------------------------------------------------------------------
a-srv		joint    	stopped	  n	      /opt/lxcf/a-srv
a0001		joint    	stopped	  n	      /opt/lxcf/a0001
</pre>
<HR><form action="http://localhost:8080/lxcfv1/list" method="POST" AcceptEncoding="utf-8">
<dl>
<dt>password</dt>
<dd><input type="password" name="password" value=""/></dd>
</dl>
<input type="submit" name="save" value="Execution" />
</form></body></html>


<pre>から</pre>までが、APIの結果を示します。

6. コマンドラインクライアント

ブラウザを使わないで、コマンドラインからcurlコマンドでREST APIを操作しましょう。 curlのようなネットワークツールを使用する場合には、POST操作だけでAPIを操作できます。

POST操作

$ curl -F " passwd=''パスワード "   URL

URLは以下のような形式です。


 http://アドレス:ポート番号/lxcfv1/APIのパス

APIのパスは、lxcfコマンドで実行するときの空白を'/'に変えたものを指定します。

実行結果は<pre> 〜 </pre>に囲まれているので、たとえば以下のようにすると簡単に取り出せます。

 $ curl -F " passwd=''パスワード "   URL  |   awk 'BEGIN{f=1}{if ($0~/pre/){f=f*(-1)}else if (f == -1) print}'

これらを組み合わせれば、シェルスクリプトで簡単にLXCFを操作する運用プログラムを作成できることでしょう。

Python, Perl, C言語のネットワークプログラムからも同様に扱えます。

7. Browseable REST APIの一覧

REST APIを発行するときのURLのパスでAPIは規定されます。
URLは以下のような形式です。

 http://ホスト名:ポート番号/lxcfv1/APIのパス
APIのパスは、lxcfコマンドで実行するときの空白を'/'に変えたものを指定します。
ただし、update, deploy, export-dockerサブコマンドは使えません。

resource controls

http://HOSTNAME:PORT/lxcfv1/cpun/(LXCFNAME or UUID)/CPU_NUMBER/
http://HOSTNAME:PORT/lxcfv1/cpurate/(LXCFNAME or UUID)/CPU_RATE/
http://HOSTNAME:PORT/lxcfv1/numa/(LXCFNAME or UUID)/NUMA_NUMBER/
http://HOSTNAME:PORT/lxcfv1/memlimit/(LXCFNAME or UUID)/MEMORY_LIMIT/
http://HOSTNAME:PORT/lxcfv1/memswlimit/(LXCFNAME or UUID)/MEMORY&SWAP_LIMIT/
http://HOSTNAME:PORT/lxcfv1/blkio_r/(LXCFNAME or UUID)/BLKIO_READ_LIMIT/
http://HOSTNAME:PORT/lxcfv1/blkio_w/(LXCFNAME or UUID)/BLKIO_WRITE_LIMIT/
http://HOSTNAME:PORT/lxcfv1/blkiops_r/(LXCFNAME or UUID)/BLKIOPS_READ_LIMIT/
http://HOSTNAME:PORT/lxcfv1/blkiops_w/(LXCFNAME or UUID)/BLKIOPS_WRITE_LIMIT/
http://HOSTNAME:PORT/lxcfv1/net_cls/(LXCFNAME or UUID)/NET_CLS_ID/
http://HOSTNAME:PORT/lxcfv1/show/[(LXCFNAME or UUID)]/
http://HOSTNAME:PORT/lxcfv1/set/[-c/CPURATE/][-i/CPU番号/ ][-n/NUMA番号/][-m/MEMLIMIT/][-s/MEMSWLIMIT/](LXCFNAME | UUID)/.../

container management

http://HOSTNAME:PORT/lxcfv1/sysgen/[-p/パス/]コンテナ名/.../
http://HOSTNAME:PORT/lxcfv1/clone/[-p/パス/](元コンテナ名 or UUID)/新コンテナ名/.../
http://HOSTNAME:PORT/lxcfv1/erase/(LXCFNAME or UUID)/.../
http://HOSTNAME:PORT/lxcfv1/list/[-q/][(コンテナ名 or UUID)/.../]
http://HOSTNAME:PORT/lxcfv1/log/[-f/]
http://HOSTNAME:PORT/lxcfv1/autostart/(LXCFNAME or UUID)/.../
http://HOSTNAME:PORT/lxcfv1/rename/LXCFNAME/NEW-LXCFNAME/

start/stop management

http://HOSTNAME:PORT/lxcfv1/start/(LXCFNAME or UUID)/.../
http://HOSTNAME:PORT/lxcfv1/stop/(LXCFNAME or UUID)/.../
http://HOSTNAME:PORT/lxcfv1/suspend/(LXCFNAME or UUID)/.../
http://HOSTNAME:PORT/lxcfv1/resume/(LXCFNAME or UUID)/.../
http://HOSTNAME:PORT/lxcfv1/run/(LXCFNAME or UUID)/CMD/

複数コンテナの操作

http://HOSTNAME:PORT/lxcfv1/sysgen-n/[-p/path/ ][-c/resource-file/]コンテナ名プレフィックス/[数字初期値/]数字終了値/
http://HOSTNAME:PORT/lxcfv1/clone-n/[-p/path/]コンテナ名プレフィックス/[数字初期値/]数字終了値/
http://HOSTNAME:PORT/lxcfv1/erase-n/コンテナ名プレフィックス/[数字初期値/]数字終了値/
http://HOSTNAME:PORT/lxcfv1/start-n/コンテナ名プレフィックス/[数字初期値/]数字終了値/
http://HOSTNAME:PORT/lxcfv1/stop-n/コンテナ名プレフィックス/[数字初期値/]数字終了値/  
http://HOSTNAME:PORT/lxcfv1/resume-n/コンテナ名プレフィックス[数字初期値/]数字終了値/
http://HOSTNAME:PORT/lxcfv1/set-n/[-c/CPURATE/][-a/Num-of-CPU/][-i/CPU-Number/][-n/NUMA-Number/][-m/MEMLIMIT/][-s/ MEMSWLIMIT/]name-prefix/[start-number/]end-number/
http://HOSTNAME:PORT/lxcfv1/atuostart-n/[-d/]コンテナ名プレフィックス/[数字初期値/]数字終了値/

battch queue

http://HOSTNAME:PORT/lxcfv1/submit/LXCFコマンド/
http://HOSTNAME:PORT/lxcfv1/queue/cancel/UUID/
http://HOSTNAME:PORT/lxcfv1/queue/clear/[-h/][-q/][-l/][-a/]
http://HOSTNAME:PORT/lxcfv1/queue/list/
http://HOSTNAME:PORT/lxcfv1/queue/move/[-h/][-q/][-l/]UUID /
http://HOSTNAME:PORT/lxcfv1/queue/multi/数/

snapshot & restore

http://HOSTNAME:PORT/lxcfv1/snapshot/[-f/][-p/PATH/][-n/SNAPSHOT_IMAGE/](UUID | NAME)/
http://HOSTNAME:PORT/lxcfv1/restore/[-n/NEW_NAME/][-p/PATH/][-f/][-s/]SNAPSHOT_IMAGE/
http://HOSTNAME:PORT/lxcfv1/snapshot-pull/[-f/][-s/][-p/PASSWORD/][-n/NEW_SNAP_NAME/]SERVER_NAME:PORT/SNAPSHOT_NAME/
http://HOSTNAME:PORT/lxcfv1/snapshot-list/[-p/PASSWORD/][-i/SERVERNAME:PORT/][SNAPSHOT_IMAGE/...]/
http://HOSTNAME:PORT/lxcfv1/snapshot-erase/[-f/]SNAPSHOT_IMAGE/.../

help

http://HOSTNAME:PORT/lxcfv1/helpcmd/
http://HOSTNAME:PORT/lxcfv1/version/

元のページに戻る