コンテンツにスキップ

デバッグ API

このデプロイメントの 1 台の CE から 2026-07-28 に取得しました。sitecli/capture-manifest.json にどのノードかが記録されており、scripts/capture-sitecli.sh --check により実行中の CE に対して コマンド一覧を再検証できます。

vpm/debug API は登録済みノード上で Site CLI コマンドを実行し、その出力を返します。 以下の内容はすべて稼働中のノードに対して確認したものであり、いずれも上流では 公開されていません。

コマンドカタログは自己記述型です

Section titled “コマンドカタログは自己記述型です”

command キーを省略して exec-user に POST することで、ノードがサポートする内容を 問い合わせられます:

Terminal window
curl -sS -X POST \
-H "Authorization: APIToken $XCSH_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"namespace":"system","site":"<site>","node":"<node>"}' \
"$XCSH_API_URL/api/operate/namespaces/system/sites/<site>/vpm/debug/<node>/exec-user" \
| jq -r .output | jq .

レスポンスはコマンド名をキーとする JSON オブジェクトです:

{
"crictl-inspect": ["System Troubleshooting", "ExecUser", " container-id"],
"diagnosis": ["System Troubleshooting", "ExecUser", "no argument needed", "GLOBAL"],
"ip-link-set": ["Network Troubleshooting", "Exec", " (<device>||<group>) (up||down)"]
}

各エントリは [category, tier, exampleArgument?, scope?] であり、これらのフィールドは ドキュメントではなく、コマンドをどのように呼び出さなければならないかを決定します。

カタログエントリによって選択される 3 つのトランスポート

Section titled “カタログエントリによって選択される 3 つのトランスポート”
条件メソッドとパスボディ戻り値
scopeGLOBALGET .../vpm/debug/global/<cmd>なしJSON
tierExecUserPOST .../vpm/debug/<node>/exec-usercommand 配列テキスト
tierExecPOST .../vpm/debug/<node>/execcommand 配列テキスト

ExecUser — 読み取り専用ティア 31 コマンド

Section titled “ExecUser — 読み取り専用ティア ”

一般的なケースです。コマンド名を先頭にして、コマンドとその引数を配列として渡します:

Terminal window
curl -sS -X POST \
-H "Authorization: APIToken $XCSH_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"namespace":"system","site":"<site>","node":"<node>","command":["crictl-ps"]}' \
"$XCSH_API_URL/api/operate/namespaces/system/sites/<site>/vpm/debug/<node>/exec-user"
{ "return_code": 0, "output": "CONTAINER IMAGE CREATED STATE ..." }

引数は単一の文字列ではなく、個別の配列要素として指定します:

{ "command": ["journalctl", "-u", "vpm", "-n", "200"] }

GLOBAL — サイト全体を対象とし、まったく異なるトランスポート 2 コマンド

Section titled “GLOBAL — サイト全体を対象とし、まったく異なるトランスポート ”

healthdiagnosis の 2 つのみです。これらは global パスへの GET リクエストで、 引数を取らず、ターミナルテキストではなく構造化された JSON を返します。

Terminal window
curl -sS -H "Authorization: APIToken $XCSH_API_TOKEN" \
"$XCSH_API_URL/api/operate/namespaces/system/sites/<site>/vpm/debug/global/health" | jq .

Exec — 特権ティア このビルドでは 1 コマンド

Section titled “Exec — 特権ティア ”

別のエンドポイントであり、ティアは助言的なものではなく強制されます: exec は 同じ command not supported メッセージで ExecUser コマンドを拒否します。所属する すべてのコマンドは、ノードを変更するか、状態マーカーを読み取るかのいずれかです。

このテナントが稼働しているビルドでは、このティアには ip-link-set のみが含まれます。 より新しいビルドでは systemctl-restart-NetworkManagersystemctl-restart-criosystemctl-restart-kubeletsystemctl-start-crio-prune および 3 つの marker-exists-* コマンドが追加されます。

サイト名とノード名の確認方法

Section titled “サイト名とノード名の確認方法”

ノード名は Azure VM 名であり、list-service はそれをノード上で稼働しているサービスと 併せて確認する手軽な方法です:

Terminal window
curl -sS -H "Authorization: APIToken $XCSH_API_TOKEN" \
"$XCSH_API_URL/api/operate/namespaces/system/sites/<site>/vpm/debug/global/list-service" \
| jq -r '[.service[].node] | unique'
["", "f5-xc-ce-vm-01"]

一部のサービスは空のノード名を報告するため、このリスト内の空文字列は 2 台目のノードではなく レスポンスの副産物です。また list-service は 34 コマンドのカタログには含まれていません: これはカタログが公開していない global エンドポイントであり、そのためここに記載されており、 コマンドリファレンスには含まれていません。

このリポジトリのキャプチャの再現

Section titled “このリポジトリのキャプチャの再現”

各コマンドページには scripts/capture-sitecli.sh によって取得された出力が埋め込まれており、 このスクリプトは上記 3 つのルールすべてを実装しています。

  1. テナントを指定します。XCSH_API_URLXCSH_API_TOKEN を読み取るか、 アクティブな xcsh コンテキストにフォールバックします。

  2. カタログを更新し、ドキュメントの背後でノードが変更されていないことを確認します:

    Terminal window
    bash scripts/capture-sitecli.sh --check

    これはコミット済みのカタログとソフトウェアビルドのみを比較します。ビルドの変更は、 コマンドの追加または削除とは別に報告されます。

  3. 新しい証跡が必要な場合は再キャプチャします:

    Terminal window
    bash scripts/capture-sitecli.sh