Lorsque vous utilisez Alibaba Cloud CLI pour appeler des API, il peut être nécessaire de récupérer toutes les données paginées en une seule fois, d'attendre la création d'une ressource avant de poursuivre, ou de vérifier la validité d'une commande sans l'exécuter réellement. Cette rubrique décrit les paramètres globaux qui permettent de mettre en œuvre ces trois scénarios et explique comment les configurer.
Choisir le paramètre approprié
Ces trois options sont des paramètres globaux qui s'appliquent à un seul appel d'API. Choisissez le paramètre adapté à votre scénario :
|
Scénario |
Paramètre |
|
Une API List ne renvoie qu'une seule page, mais vous avez besoin de toutes les données |
|
|
Attendre qu'une ressource soit prête après sa création |
|
|
Vérifier la syntaxe de la commande sans l'exécuter réellement |
|
Règles d'exclusion mutuelle
Les options
--pageret--waiterne peuvent pas être utilisées simultanément. Si vous les combinez, la CLI renvoie l'erreur suivante :ERROR: flag --pager is exclusive with --waiter.L'option
--cli-dry-runpeut coexister avec--pagerou--waiter, mais comme la requête n'est pas envoyée, la pagination et l'interrogation (polling) ne sont pas exécutées.
Agréger automatiquement toutes les pages (--pager)
Utilisation de base
Ajoutez l'option --pager à toute API de type List/Describe prenant en charge la pagination. La CLI parcourt automatiquement toutes les pages et fusionne les résultats dans une sortie unique.
aliyun ecs describe-instances --biz-region-id cn-hangzhou --pager
Deux modes de pagination
La CLI détermine automatiquement le mode à utiliser. Aucune configuration manuelle n'est nécessaire.
Mode PageNumber : La réponse de l'API contient les champs
PageNumber,PageSizeetTotalCount. La CLI incrémente le numéro de page jusqu'à ce que toutes les pages soient récupérées.Mode NextToken : La réponse de l'API contient un champ
NextToken. La CLI transmet la valeurNextTokenrenvoyée comme paramètre de la requête suivante, jusqu'à ce queNextTokensoit une chaîne vide.
Si la réponse contient un champ NextToken avec une valeur non vide, le mode NextToken est utilisé. Sinon, le mode PageNumber est appliqué.
Mappage des champs
Les sous-paramètres suivants sont tous facultatifs. Vous devez les spécifier uniquement lorsqu'une API utilise des noms de champs non standards pour les informations de pagination, afin d'indiquer à la CLI quels noms de champs l'API utilise. Dans la plupart des cas, il suffit d'ajouter --pager.
|
Sous-paramètre |
Valeur par défaut |
Quand le spécifier |
|
|
(aucun) |
Le tableau de données dans la réponse ne se trouve pas au niveau racine (par exemple, |
|
|
PageNumber |
L'API utilise un nom de champ différent pour le numéro de page |
|
|
PageSize |
L'API utilise un nom de champ différent pour la taille de la page |
|
|
TotalCount |
L'API utilise un nom de champ différent pour le nombre total d'enregistrements |
|
|
NextToken |
L'API utilise un nom de champ différent pour le jeton de pagination |
Syntaxe : --pager key=value key=value. Plusieurs sous-paramètres sont séparés par des espaces. La value correspond au nom réel du champ dans la réponse de l'API, et non à une valeur spécifique. Par exemple, PageNumber=CurrentPage signifie que l'API utilise le champ CurrentPage pour représenter le numéro de page, et non que vous spécifiez une page de départ.
Exemples de mappage de champs personnalisés
Le tableau de données est imbriqué à l'emplacement Vpcs.Vpc[] dans la réponse de l'API :
aliyun vpc describe-vpcs --biz-region-id cn-hangzhou --pager path=Vpcs.Vpc[]
L'API utilise Token au lieu de NextToken (xxx et list-yyy sont des commandes fictives) :
aliyun xxx list-yyy --biz-region-id cn-hangzhou --pager NextToken=Token
Attendre le statut d'une ressource (--waiter)
Utilisation de base
La CLI appelle répétitivement la commande actuelle, extrait une valeur de chaque réponse à l'aide de l'expression expr, et arrête l'interrogation (polling) lorsque la valeur extraite correspond à la valeur to, en renvoyant la dernière réponse. Lorsque timeout et interval ne sont pas spécifiés, la CLI interroge toutes les 5 secondes pendant un maximum de 180 secondes (3 minutes) par défaut.
aliyun ecs describe-instances \
--biz-region-id cn-hangzhou \
--instance-ids '["i-bp1xxxxx"]' \
--waiter expr='Instances.Instance[0].Status' to=Running
Sous-paramètres
|
Sous-paramètre |
Obligatoire |
Valeur par défaut |
Plage de valeurs |
Description |
|
|
Oui |
— |
— |
Une expression JMESPath qui spécifie le champ à surveiller dans la réponse JSON. |
|
|
Oui |
— |
— |
La valeur cible. L'interrogation s'arrête et les données sont renvoyées lorsque le résultat de |
|
|
Non |
180 |
1–600 (secondes) |
Le temps d'attente maximal pour l'interrogation. Si la valeur cible n'est pas atteinte dans ce délai, la CLI renvoie une erreur et se termine. |
|
|
Non |
5 |
2–10 (secondes) |
L'intervalle entre deux tentatives d'interrogation. |
Le champ référencé par
exprdoit être de type chaîne. Si le champ dans la réponse de l'API est un nombre ou un booléen JSON (true/false), la CLI renvoie immédiatement une erreur.La valeur
toest toujours comparée en tant que chaîne. Pour les statuts numériques, écrivezto=1(et nonto=1.0). Si l'API renvoie un booléen sous forme de chaîne (par exemple,"true"), écrivezto=true.Si un appel d'API renvoie une erreur HTTP pendant l'interrogation, la CLI s'arrête immédiatement et affiche l'erreur sans réessayer.
-
Lorsque le délai
timeoutexpire sans que la valeur cible ne soit atteinte, la CLI se termine avec un code de sortie non nul et affiche le message suivant surstderr:wait 'Instances.Instance[0].Status' to 'Running' timeout(180seconds), last='Pending'La valeur
lastcorrespond à la valeur réelle obtenue lors de la dernière interrogation.
Contrôler la fréquence d'interrogation
Réduire l'intervalle d'interrogation (attente maximale de 30 secondes, interrogation toutes les 2 secondes) :
aliyun ecs describe-instances \
--biz-region-id cn-hangzhou \
--instance-ids '["i-bp1xxxxx"]' \
--waiter expr='Instances.Instance[0].Status' to=Running timeout=30 interval=2
Augmenter le temps d'attente pour les ressources qui mettent plus de temps à démarrer (attente maximale de 10 minutes, interrogation toutes les 10 secondes) :
aliyun ecs describe-instances \
--biz-region-id cn-hangzhou \
--instance-ids '["i-bp1xxxxx"]' \
--waiter expr='Instances.Instance[0].Status' to=Running timeout=600 interval=10
Vérifier la commande sans l'exécuter (--cli-dry-run)
Utilisation de base
Il s'agit d'un commutateur booléen qui prend effet lorsqu'il est ajouté. Aucune affectation de valeur n'est nécessaire. La CLI construit la requête complète, affiche les détails de la requête, mais ne l'envoie pas au serveur.
aliyun ecs describe-instances --biz-region-id cn-hangzhou --cli-dry-run
Contenu de la sortie
La sortie inclut : la méthode HTTP, l'Endpoint, l'API Action et les Query Parameters. Vous pouvez utiliser ces informations pour vérifier si l'endpoint est correct et si la sérialisation des paramètres est conforme aux attentes.
Exemple de sortie :
============================================================
DRY-RUN MODE: Request Details (No actual API call)
============================================================
Method: POST
URL:
Endpoint: ecs.cn-hangzhou.aliyuncs.com
API Version: 2014-05-26
API Action: DescribeInstances
Protocol: HTTPS
Style: RPC
Query Parameters:
RegionId: cn-hangzhou
============================================================
Request NOT sent (dry-run mode)
============================================================
{
"message": "dry-run mode - no request sent"
}
Scénarios typiques
Prévisualiser avant d'exécuter des opérations sensibles (telles que
delete-instanceoustop-instance). Après avoir confirmé que les paramètres sont corrects, supprimez--cli-dry-runpour exécuter la commande.Vérifier la justesse de l'assemblage des commandes dans les pipelines CI/CD (sans consommer de ressources ni engendrer de coûts).
Scénario d'automatisation : workflow asynchrone complet
Scénario : Créer un VPC, attendre que son statut devienne disponible, puis récupérer la liste complète des VPC. Ce qui suit montre comment les trois paramètres fonctionnent ensemble pour réaliser une opération asynchrone.
Étape 1 : Vérifier la commande de création avec --cli-dry-run
aliyun vpc create-vpc \
--biz-region-id cn-hangzhou \
--cidr-block 172.16.0.0/12 \
--vpc-name test-vpc \
--cli-dry-run
Après avoir confirmé que l'Endpoint et la sérialisation des paramètres sont corrects, supprimez --cli-dry-run pour exécuter la commande.
Étape 2 : Exécuter la création et extraire l'ID du VPC
VPC_ID=$(aliyun vpc create-vpc \
--biz-region-id cn-hangzhou \
--cidr-block 172.16.0.0/12 \
--vpc-name test-vpc \
--cli-query 'VpcId')
L'option --cli-query extrait l'ID du VPC de la réponse.
Étape 3 : Attendre que l'instance soit prête avec --waiter
La CLI interroge toutes les 5 secondes jusqu'à ce que le statut passe à Available ou que le délai d'expiration de 60 secondes soit atteint :
aliyun vpc describe-vpcs \
--biz-region-id cn-hangzhou \
--vpc-id "$VPC_ID" \
--waiter expr='Vpcs.Vpc[0].Status' to=Available timeout=60
Étape 4 : Récupérer tous les VPC avec --pager
Lorsque vous disposez de nombreux VPC, sans l'option --pager, seule la première page est renvoyée et le nouveau VPC peut ne pas être visible. Utilisez --pager pour confirmer que le VPC nouvellement créé apparaît dans la liste :
aliyun vpc describe-vpcs --biz-region-id cn-hangzhou --pager
Étape 5 : Supprimer le VPC (facultatif)
Supprimez le VPC créé précédemment :
aliyun vpc delete-vpc --vpc-id $VPC_ID
FAQ
Peut-on utiliser --pager et --waiter ensemble ?
Non. Ces options s'excluent mutuellement. La CLI renvoie l'erreur suivante : ERROR: flag --pager is exclusive with --waiter. Si vous devez attendre qu'une ressource soit prête, puis récupérer la liste complète, utilisez deux commandes distinctes.