Utiliser des constructions en boucle dans AWSTOE - EC2Image Builder

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utiliser des constructions en boucle dans AWSTOE

Cette section fournit des informations pour vous aider à créer des constructions en boucle dans le. AWSTOE Les constructions en boucle définissent une séquence répétée d'instructions. Vous pouvez utiliser les types de constructions en boucle suivants dans : AWSTOE

  • forconstructs — Itérer sur une séquence bornée d'entiers.

  • forEachconstruit

    • forEachboucle avec liste d'entrées : itère sur une collection limitée de chaînes.

    • forEachboucle avec liste délimitée : itère sur une collection limitée de chaînes jointes par un délimiteur.

Note

Les constructions en boucle ne prennent en charge que les types de données sous forme de chaîne.

Variables d'itération de référence

Pour faire référence à l'index et à la valeur de la variable d'itération en cours, l'expression de référence {{ loop.* }} doit être utilisée dans le corps d'entrée d'une étape contenant une construction en boucle. Cette expression ne peut pas être utilisée pour faire référence aux variables d'itération de la construction en boucle d'une autre étape.

L'expression de référence comprend les membres suivants :

  • {{ loop.index }}— Position ordinale de l'itération en cours, qui est indexée à. 0

  • {{ loop.value }}— La valeur associée à la variable d'itération en cours.

Noms des boucles

Toutes les constructions en boucle ont un champ de nom facultatif pour l'identification. Si un nom de boucle est fourni, il peut être utilisé pour faire référence à des variables d'itération dans le corps d'entrée de l'étape. Pour faire référence aux indices d'itération et aux valeurs d'une boucle nommée, utilisez {{ <loop_name>.* }} with {{ loop.* }} dans le corps de saisie de l'étape. Cette expression ne peut pas être utilisée pour faire référence à la construction en boucle nommée d'une autre étape.

L'expression de référence comprend les membres suivants :

  • {{ <loop_name>.index }}— Position ordinale de l'itération en cours de la boucle nommée, qui est indexée à. 0

  • {{ <loop_name>.value }}— La valeur associée à la variable d'itération actuelle de la boucle nommée.

Résoudre les expressions de référence

AWSTOE Résout les expressions de référence comme suit :

  • {{ <loop_name>.* }}— AWSTOE résout cette expression selon la logique suivante :

    • Si la boucle de l'étape en cours d'exécution correspond à la <loop_name> valeur, l'expression de référence est résolue en fonction de la structure en boucle de l'étape en cours d'exécution.

    • <loop_name>aboutit à la construction en boucle nommée si elle apparaît dans l'étape en cours d'exécution.

  • {{ loop.* }}— AWSTOE résout l'expression à l'aide de la construction en boucle définie dans l'étape en cours d'exécution.

Si des expressions de référence sont utilisées dans une étape ne contenant pas de boucle, les expressions AWSTOE ne sont pas résolues et elles apparaissent dans l'étape sans être remplacées.

Note

Les expressions de référence doivent être placées entre guillemets pour être correctement interprétées par le YAML compilateur.

Types de constructions en boucle

Cette section fournit des informations et des exemples sur les types de construction en boucle qui peuvent être utilisés dans le AWSTOE.

forboucle

La for boucle itère sur une plage d'entiers spécifiée dans une limite définie par le début et la fin des variables. Les valeurs itératives font partie de l'ensemble [start, end] et incluent les valeurs limites.

AWSTOE vérifie les updateBy valeurs startend, et pour s'assurer que la combinaison ne donne pas lieu à une boucle infinie.

forschéma de boucle

- name: "StepName" action: "ActionModule" loop: name: "string" for: start: int end: int updateBy: int inputs: ...
forentrée en boucle
Champ Description Type Obligatoire Par défaut

name

Nom unique de la boucle. Il doit être unique par rapport aux autres noms de boucle de la même phase.

Chaîne

Non

""

start

Valeur de départ de l'itération. N'accepte pas le chaînage d'expressions.

Entier

Oui

N/A

end

Valeur finale de l'itération. N'accepte pas le chaînage d'expressions. Entier Oui N/A

updateBy

Différence selon laquelle une valeur itérative est mise à jour par addition. Il doit s'agir d'une valeur négative ou positive différente de zéro. N'accepte pas le chaînage d'expressions. Entier Oui N/A

forexemple d'entrée en boucle

- name: "CalculateFileUploadLatencies" action: "ExecutePowerShell" loop: for: start: 100000 end: 1000000 updateBy: 100000 inputs: commands: - | $f = new-object System.IO.FileStream c:\temp\test{{ loop.index }}.txt, Create, ReadWrite $f.SetLength({{ loop.value }}MB) $f.Close() - c:\users\administrator\downloads\latencyTest.exe --file c:\temp\test{{ loop.index }}.txt - AWS s3 cp c:\users\administrator\downloads\latencyMetrics.json s3://bucket/latencyMetrics.json - | Remove-Item -Path c:\temp\test{{ loop.index }}.txt Remove-Item -Path c:\users\administrator\downloads\latencyMetrics.json

forEachboucle avec liste d'entrées

La forEach boucle itère sur une liste explicite de valeurs, qui peuvent être des chaînes ou des expressions enchaînées.

forEachboucle avec schéma de liste d'entrées

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: - "string" inputs: ...
forEachboucle avec entrée de liste d'entrées
Champ Description Type Obligatoire Par défaut

name

Nom unique de la boucle. Il doit être unique par rapport aux autres noms de boucle de la même phase.

Chaîne

Non

""

Liste des chaînes de forEach boucles

Liste des chaînes pour l'itération. Accepte les expressions chaînées sous forme de chaînes dans la liste. Les expressions chaînées doivent être placées entre guillemets pour que le YAML compilateur puisse les interpréter correctement.

Liste de chaînes

Oui

N/A

forEachboucle avec liste d'entrées, exemple 1

- name: "ExecuteCustomScripts" action: "ExecuteBash" loop: name: BatchExecLoop forEach: - /tmp/script1.sh - /tmp/script2.sh - /tmp/script3.sh inputs: commands: - echo "Count {{ BatchExecLoop.index }}" - sh "{{ loop.value }}" - | retVal=$? if [ $retVal -ne 0 ]; then echo "Failed" else echo "Passed" fi

forEachboucle avec liste d'entrées, exemple 2

- name: "RunMSIWithDifferentArgs" action: "ExecuteBinary" loop: name: MultiArgLoop forEach: - "ARG1=C:\Users ARG2=1" - "ARG1=C:\Users" - "ARG1=C:\Users ARG3=C:\Users\Administrator\Documents\f1.txt" inputs: commands: path: "c:\users\administrator\downloads\runner.exe" args: - "{{ MultiArgLoop.value }}"

forEachexemple de boucle avec liste d'entrées 3

- name: "DownloadAllBinaries" action: "S3Download" loop: name: MultiArgLoop forEach: - "bin1.exe" - "bin10.exe" - "bin5.exe" inputs: - source: "s3://bucket/{{ loop.value }}" destination: "c:\temp\{{ loop.value }}"

forEachboucle avec liste délimitée

La boucle itère sur une chaîne contenant des valeurs séparées par un délimiteur. Pour itérer sur les constituants de la chaîne, utilisez AWSTOE le délimiteur pour diviser la chaîne en un tableau adapté à l'itération.

forEachboucle avec schéma de liste délimité

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: list: "string" delimiter: ".,;:\n\t -_" inputs: ...
forEachboucle avec entrée de liste délimitée
Champ Description Type Obligatoire Par défaut

name

Nom unique attribué à la boucle. Il doit être unique par rapport aux autres noms de boucles de la même phase.

Chaîne

Non

""

list

Chaîne composée de chaînes constitutives reliées par un caractère délimiteur commun. Accepte également les expressions chaînées. Dans le cas d'expressions chaînées, assurez-vous qu'elles sont placées entre guillemets pour une interprétation correcte par le YAML compilateur. Chaîne

Oui

N/A

delimiter

Caractère utilisé pour séparer les chaînes d'un bloc. La virgule est la virgule par défaut. Un seul caractère délimiteur est autorisé dans la liste donnée :
  • Point : "."

  • Virgule : ","

  • Point-virgule : ";"

  • Colon : ":"

  • Nouvelle gamme : "\n"

  • Onglet : "\t"

  • Espace : " "

  • Trait d'union : "-"

  • Souligner : "_"

Les expressions de chaînage ne peuvent pas être utilisées.

Chaîne Non Virgule : ","
Note

La valeur de list est traitée comme une chaîne immuable. Si la source de list est modifiée pendant l'exécution, elle ne sera pas reflétée pendant l'exécution.

forEachboucle avec liste délimitée, exemple 1

Cet exemple utilise le modèle d'expression de chaînage suivant pour faire référence à la sortie d'une autre étape :<phase_name>.<step_name>.[inputs | outputs].<var_name>.

- name: "RunMSIs" action: "ExecuteBinary" loop: forEach: list: "{{ build.GetAllMSIPathsForInstallation.outputs.stdout }}" delimiter: "\n" inputs: commands: path: "{{ loop.value }}"

forEachboucle avec liste délimitée, exemple 2

- name: "UploadMetricFiles" action: "S3Upload" loop: forEach: list: "/tmp/m1.txt,/tmp/m2.txt,/tmp/m3.txt,..." inputs: commands: - source: "{{ loop.value }}" destination: "s3://bucket/key/{{ loop.value }}"

Champs d'étape

Les boucles font partie d'une étape. Aucun champ lié à l'exécution d'une étape n'est appliqué aux itérations individuelles. Les champs d'étape s'appliquent uniquement au niveau de l'étape, comme suit :

  • timeoutSeconds— Toutes les itérations de la boucle doivent être exécutées dans le délai spécifié dans ce champ. Si le délai d'exécution de la boucle expire, AWSTOE exécute la politique de nouvelle tentative de l'étape et réinitialise le paramètre de délai d'expiration pour chaque nouvelle tentative. Si le délai d'exécution de la boucle dépasse le délai d'expiration après avoir atteint le nombre maximal de tentatives, le message d'échec de l'étape indique que le délai d'exécution de la boucle a expiré.

  • onFailure— La gestion des défaillances est appliquée à l'étape comme suit :

    • S'il onFailureest défini surAbort, AWSTOE quitte la boucle et recommence l'étape conformément à la politique de relance. Une fois le nombre maximal de tentatives atteint, AWSTOE marque l'étape en cours comme ayant échoué et arrête l'exécution du processus.

      AWSTOE définit le code d'état de la phase parent et du document surFailed.

      Note

      Aucune autre étape n'est exécutée après l'échec de l'étape.

    • S'il onFailureest défini surContinue, AWSTOE quitte la boucle et recommence l'étape conformément à la politique de relance. Une fois le nombre maximal de tentatives atteint, AWSTOE marque l'étape en cours comme ayant échoué et passe à l'étape suivante.

      AWSTOE définit le code d'état de la phase parent et du document surFailed.

    • S'il onFailureest défini surIgnore, AWSTOE quitte la boucle et recommence l'étape conformément à la politique de relance. Une fois le nombre maximal de tentatives atteint, AWSTOE marque l'étape en cours comme telle IgnoredFailure et passe à l'étape suivante.

      AWSTOE définit le code d'état de la phase parent et du document surSuccessWithIgnoredFailure.

      Note

      Ceci est toujours considéré comme une exécution réussie, mais inclut des informations vous indiquant qu'une ou plusieurs étapes ont échoué et ont été ignorées.

  • maxAttempts — À chaque nouvelle tentative, l'étape complète et toutes les itérations sont exécutées depuis le début.

  • status — État général de l'exécution d'une étape. statusne représente pas le statut des itérations individuelles. Le statut d'une étape comportant des boucles est déterminé comme suit :

    • Si une seule itération échoue, le statut d'une étape indique un échec.

    • Si toutes les itérations aboutissent, le statut d'une étape indique un succès.

  • startTime — L'heure de début globale de l'exécution d'une étape. Ne représente pas l'heure de début des itérations individuelles.

  • endTime — L'heure de fin globale de l'exécution d'une étape. Ne représente pas l'heure de fin des itérations individuelles.

  • failureMessage — Inclut les indices d'itération qui ont échoué en cas d'erreurs autres que le délai d'expiration. En cas d'erreur de temporisation, le message indique que l'exécution de la boucle a échoué. Les messages d'erreur individuels pour chaque itération ne sont pas fournis afin de minimiser la taille des messages d'échec.

Sorties d'étape et d'itération

Chaque itération contient une sortie. À la fin d'une exécution en boucle, AWSTOE consolide toutes les sorties d'itération réussies dans. detailedOutput.json Les sorties consolidées sont un assemblage de valeurs appartenant aux clés de sortie correspondantes telles que définies dans le schéma de sortie du module d'action. L'exemple suivant montre comment les sorties sont consolidées :

Sortie de ExecuteBash pour l'itération 1

{ "stdout":"Hello" }

Sortie de ExecuteBash pour l'itération 2

{ "stdout":"World" }

Sortie de ExecuteBash for Step

{ "stdout":"Hello\nWorld" }

Par exemple, ExecuteBashExecutePowerShell, et ExecuteBinary sont des modules d'action qui renvoient STDOUT en tant que sortie du module d'action. STDOUTles messages sont joints au nouveau caractère de ligne pour produire le résultat global de l'étape d'introductiondetailedOutput.json.

AWSTOE ne consolidera pas les résultats des itérations infructueuses.