Aller au contenu

API de débogage

Capturé le 2026-07-28 depuis un CE de ce déploiement. sitecli/capture-manifest.json enregistre de quel nœud il s’agit, et scripts/capture-sitecli.sh --check revérifie la surface de commandes face à un CE en fonctionnement.

L’API vpm/debug exécute des commandes Site CLI sur un nœud enregistré et renvoie leur sortie. Tout ce qui suit a été établi face à un nœud réel ; rien de tout cela n’est publié en amont.

Demandez au nœud ce qu’il prend en charge en envoyant un POST à exec-user avec la clé command omise :

Fenêtre de terminal
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 .

La réponse est un objet JSON indexé par nom de commande :

{
"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)"]
}

Chaque entrée est [category, tier, exampleArgument?, scope?], et ces champs ne sont pas de la documentation — ils déterminent la manière dont la commande doit être appelée.

Trois transports, choisis par l’entrée du catalogue

Section intitulée « Trois transports, choisis par l’entrée du catalogue »
ConditionMéthode et cheminCorpsRenvoie
scope vaut GLOBALGET .../vpm/debug/global/<cmd>aucunJSON
tier vaut ExecUserPOST .../vpm/debug/<node>/exec-usertableau commandtexte
tier vaut ExecPOST .../vpm/debug/<node>/exectableau commandtexte

ExecUser — le niveau en lecture seule 31 commandes

Section intitulée « ExecUser — le niveau en lecture seule »

Le cas courant. Passez la commande et ses arguments sous forme de tableau, le nom de la commande en premier :

Fenêtre de terminal
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 ..." }

Les arguments sont des éléments de tableau distincts, et non une chaîne unique :

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

GLOBAL — à l’échelle du site, et un transport entièrement différent 2 commandes

Section intitulée « GLOBAL — à l’échelle du site, et un transport entièrement différent »

health et diagnosis sont les deux seules. Il s’agit de requêtes GET vers un chemin global, elles ne prennent aucun argument et renvoient du JSON structuré plutôt que du texte de terminal.

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

Exec — le niveau privilégié 1 commande sur cette build

Section intitulée « Exec — le niveau privilégié »

Un endpoint distinct, et le niveau est appliqué plutôt qu’indicatif : exec rejette une commande ExecUser avec le même message command not supported. Chaque membre soit modifie le nœud, soit lit un marqueur d’état.

Sur la build que ce tenant exécute, le niveau ne contient que ip-link-set. Des builds plus récentes ajoutent systemctl-restart-NetworkManager, systemctl-restart-crio, systemctl-restart-kubelet, systemctl-start-crio-prune et trois commandes marker-exists-*.

Le nom du nœud est le nom de la VM Azure, et list-service est un moyen économique de le confirmer, en même temps que les services qui y sont exécutés :

Fenêtre de terminal
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"]

Certains services signalent un nom de nœud vide ; une chaîne vide dans cette liste est donc un artéfact de la réponse plutôt qu’un second nœud. list-service ne figure pas non plus dans le catalogue de 34 commandes : c’est un endpoint global que le catalogue n’annonce pas, ce qui explique pourquoi il est documenté ici et non dans la référence des commandes.

Chaque page de commande intègre la sortie capturée par scripts/capture-sitecli.sh, qui met en œuvre les trois règles ci-dessus.

  1. Pointez-le vers un tenant. Il lit XCSH_API_URL et XCSH_API_TOKEN, ou revient au contexte xcsh actif.

  2. Actualisez le catalogue et confirmez que le nœud n’a pas changé sous la documentation :

    Fenêtre de terminal
    bash scripts/capture-sitecli.sh --check

    Cela compare uniquement le catalogue validé et la build logicielle. Il signale un changement de build séparément des commandes ajoutées ou supprimées.

  3. Refaites une capture lorsque vous souhaitez des preuves récentes :

    Fenêtre de terminal
    bash scripts/capture-sitecli.sh