

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
<a name="toe-looping-constructs"></a>

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
+ `for`constructs — Itérer sur une séquence bornée d'entiers.
+ `forEach`construit
  + `forEach`boucle avec liste d'entrées : itère sur une collection limitée de chaînes. 
  + `forEach`boucle 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.

**Topics**
+ [Variables d'itération de référence](#toe-loop-iteration-variables)
+ [Types de constructions en boucle](#toe-loop-types)
+ [Champs d'étape](#toe-loop-step-fields)
+ [Sorties d'étape et d'itération](#toe-loop-step-output)

## Variables d'itération de référence
<a name="toe-loop-iteration-variables"></a>

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, indexée à. `0` 
+ `{{ loop.value }}`— La valeur associée à la variable d'itération en cours. 

### Noms des boucles
<a name="toe-loop-iteration-variables-names"></a>

 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
<a name="toe-loop-iteration-variables-expressions"></a>

 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 compilateur YAML.

## Types de constructions en boucle
<a name="toe-loop-types"></a>

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

**Topics**
+ [`for`boucle](#toe-loop-types-for)
+ [`forEach`boucle avec liste d'entrées](#toe-loop-types-foreach)
+ [`forEach`boucle avec liste délimitée](#toe-loop-types-foreach-delimited)

### `for`boucle
<a name="toe-loop-types-for"></a>

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 `start``end`, et pour s'assurer que la combinaison ne donne pas lieu à une boucle infinie.

`for`schéma de boucle

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      for:
        start: int
        end: int
        updateBy: int
inputs:
  ...
```


**`for`entré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. |  String  |  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 | 

`for`exemple 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
```

### `forEach`boucle avec liste d'entrées
<a name="toe-loop-types-foreach"></a>

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

`forEach`boucle avec schéma de liste d'entrées

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      forEach:
        - "string"
    inputs:
  ...
```


**`forEach`boucle 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. |  String  |  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 compilateur YAML puisse les interpréter correctement.  |  Liste de chaînes  |  Oui  |  N/A  | 

`forEach`boucle 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
```

`forEach`boucle 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 }}"
```

`forEach`exemple 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 }}"
```

### `forEach`boucle avec liste délimitée
<a name="toe-loop-types-foreach-delimited"></a>

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. 

`forEach`boucle avec schéma de liste délimité

```
  - name: "StepName"
    action: "ActionModule"
    loop:
      name: "string"
      forEach:
        list: "string"
        delimiter: ".,;:\n\t -_"
    inputs:
  ...
```


**`forEach`boucle 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. |  String  |  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 compilateur YAML. | String |  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 : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/imagebuilder/latest/userguide/toe-looping-constructs.html) Les expressions de chaînage ne peuvent pas être utilisées. | String | 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.

`forEach`boucle 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 }}"
```

`forEach`boucle 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
<a name="toe-loop-step-fields"></a>

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é par 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 :
  + Si *OnFailure* est défini sur`Abort`, AWSTOE quitte la boucle et réessaie l'étape conformément à la politique de nouvelles tentatives. 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 sur`Failed`.
**Note**  
Aucune autre étape n'est exécutée après l'échec de l'étape.
  + Si *OnFailure* est défini sur`Continue`, AWSTOE quitte la boucle et réessaie l'étape conformément à la politique de nouvelles tentatives. 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 sur`Failed`.
  + Si *OnFailure* est défini sur`Ignore`, AWSTOE quitte la boucle et réessaie l'étape conformément à la politique de nouvelles tentatives. 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 sur`SuccessWithIgnoredFailure`.
**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. `status`ne 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 : 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 — 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é. Aucun message d'erreur individuel n'est fourni pour chaque itération afin de minimiser la taille des messages d'échec.

## Sorties d'étape et d'itération
<a name="toe-loop-step-output"></a>

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, `ExecuteBash``ExecutePowerShell`, et `ExecuteBinary` sont des modules d'action qui renvoient `STDOUT` en tant que sortie du module d'action. `STDOUT`les messages sont joints au nouveau caractère de ligne pour produire le résultat global de l'étape`detailedOutput.json`.

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