Usa costrutti ciclici in AWSTOE - EC2Image Builder

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa costrutti ciclici in AWSTOE

Questa sezione fornisce informazioni per aiutarvi a creare costrutti ciclici in AWSTOE. I costrutti a ciclo continuo definiscono una sequenza ripetuta di istruzioni. È possibile utilizzare i seguenti tipi di costrutti di loop in AWSTOE:

  • forcostrutti: esegue l'iterazione su una sequenza limitata di numeri interi.

  • forEachcostrutti

    • forEachloop with input list — Itera su una raccolta finita di stringhe.

    • forEachloop con elenco delimitato — Itera su una raccolta finita di stringhe unite da un delimitatore.

Nota

I costrutti di looping supportano solo i tipi di dati di tipo stringa.

Variabili di iterazione di riferimento

Per fare riferimento all'indice e al valore della variabile di iterazione corrente, l'espressione di riferimento {{ loop.* }} deve essere utilizzata all'interno del corpo di input di un passaggio che contiene un costrutto ciclico. Questa espressione non può essere utilizzata per fare riferimento alle variabili di iterazione del costrutto di looping di un altro passaggio.

L'espressione di riferimento è composta dai seguenti membri:

  • {{ loop.index }}— La posizione ordinale dell'iterazione corrente, indicizzata in. 0

  • {{ loop.value }}— Il valore associato alla variabile di iterazione corrente.

Nomi dei loop

Tutti i costrutti in loop hanno un campo nome opzionale per l'identificazione. Se viene fornito un nome di ciclo, può essere utilizzato per fare riferimento alle variabili di iterazione nel corpo di input del passaggio. Per fare riferimento agli indici di iterazione e ai valori di un ciclo denominato, utilizzate {{ <loop_name>.* }} with {{ loop.* }} nel corpo di input del passaggio. Questa espressione non può essere utilizzata per fare riferimento al costrutto di looping denominato di un altro passaggio.

L'espressione di riferimento è composta dai seguenti membri:

  • {{ <loop_name>.index }}— La posizione ordinale dell'iterazione corrente del ciclo denominato, indicizzata in. 0

  • {{ <loop_name>.value }}— Il valore associato alla variabile di iterazione corrente del ciclo denominato.

Risolve le espressioni di riferimento

Il AWSTOE risolve le espressioni di riferimento come segue:

  • {{ <loop_name>.* }} – AWSTOE risolve questa espressione utilizzando la seguente logica:

    • Se il ciclo del passaggio attualmente in esecuzione corrisponde al <loop_name> valore, l'espressione di riferimento si risolve nel costrutto di loop del passaggio attualmente in esecuzione.

    • <loop_name>si risolve nel costrutto di looping denominato se appare nella fase attualmente in esecuzione.

  • {{ loop.* }} – AWSTOE risolve l'espressione utilizzando il costrutto di looping definito nella fase attualmente in esecuzione.

Se le espressioni di riferimento vengono utilizzate all'interno di un passaggio che non contiene un ciclo, allora AWSTOE non risolve le espressioni e queste vengono visualizzate nel passaggio senza alcuna sostituzione.

Nota

Le espressioni di riferimento devono essere racchiuse tra virgolette doppie per essere interpretate correttamente dal YAML compilatore.

Tipi di costrutti ciclici

Questa sezione fornisce informazioni ed esempi sui tipi di costrutti di looping che possono essere utilizzati in AWSTOE.

forciclo

Il for ciclo itera su un intervallo di numeri interi specificato all'interno di un limite delineato dall'inizio e dalla fine delle variabili. I valori di iterazione sono inclusi nel set [start, end] e includono i valori limite.

AWSTOE verifica i updateBy valori startend, e per garantire che la combinazione non produca un ciclo infinito.

forschema a ciclo continuo

- name: "StepName" action: "ActionModule" loop: name: "string" for: start: int end: int updateBy: int inputs: ...
foringresso in loop
Campo Descrizione Tipo Obbligatorio Predefinita

name

Nome univoco del ciclo. Deve essere univoco rispetto ad altri nomi di loop nella stessa fase.

Stringa

No

""

start

Valore iniziale dell'iterazione. Non accetta espressioni concatenate.

Numero intero

N/A

end

Valore finale dell'iterazione. Non accetta espressioni concatenate. Numero intero N/A

updateBy

Differenza in base alla quale un valore iterativo viene aggiornato tramite addizione. Deve essere un valore negativo o positivo diverso da zero. Non accetta espressioni concatenate. Numero intero N/A

foresempio di input in loop

- 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

forEachloop con elenco di input

Il forEach ciclo itera su un elenco esplicito di valori, che può essere costituito da stringhe ed espressioni concatenate.

forEachciclo con schema di elenco di input

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: - "string" inputs: ...
forEachloop con immissione della lista di input
Campo Descrizione Tipo Obbligatorio Predefinita

name

Nome univoco del ciclo. Deve essere univoco rispetto ad altri nomi di loop nella stessa fase.

Stringa

No

""

Elenco di stringhe di loop forEach

Elenco di stringhe per l'iterazione. Accetta espressioni concatenate come stringhe nell'elenco. Le espressioni concatenate devono essere racchiuse tra virgolette doppie affinché il YAML compilatore le interpreti correttamente.

Elenco di stringhe

N/A

forEachciclo con elenco di input (esempio 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

forEachciclo con elenco di input (esempio 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 }}"

forEachciclo con elenco di input (esempio 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 }}"

forEachciclo con elenco delimitato

Il ciclo scorre su una stringa contenente valori separati da un delimitatore. Per iterare sui componenti della stringa, AWSTOE utilizza il delimitatore per dividere la stringa in un array adatto all'iterazione.

forEachciclo con schema a elenco delimitato

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: list: "string" delimiter: ".,;:\n\t -_" inputs: ...
forEachciclo con input di elenco delimitato
Campo Descrizione Tipo Obbligatorio Predefinita

name

Nome univoco assegnato al ciclo. Dovrebbe essere unico se confrontato con altri nomi di loop nella stessa fase.

Stringa

No

""

list

Una stringa composta da stringhe costituenti unite da un carattere delimitatore comune. Accetta anche espressioni concatenate. In caso di espressioni concatenate, assicuratevi che siano racchiuse tra virgolette doppie per una corretta interpretazione da parte del compilatore. YAML Stringa

N/A

delimiter

Carattere usato per separare le stringhe all'interno di un blocco. L'impostazione predefinita è il carattere virgola. È consentito un solo carattere delimitatore dall'elenco fornito:
  • Punto: "."

  • Virgola: ","

  • Punto e virgola: ";"

  • Colon: ":"

  • Nuova riga: "\n"

  • Scheda: "\t"

  • Spazio: " "

  • Trattino: "-"

  • Sottolineatura: "_"

Le espressioni concatenate non possono essere utilizzate.

Stringa No Virgola: ","
Nota

Il valore di list viene considerato come una stringa immutabile. Se l'origine di list viene modificata durante l'esecuzione, non verrà riflessa durante l'esecuzione.

forEachciclo con elenco delimitato (esempio 1).

Questo esempio utilizza il seguente modello di espressione concatenata per fare riferimento all'output di un altro passaggio:. <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 }}"

forEachciclo con elenco delimitato (esempio 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 }}"

Campi Step

I loop fanno parte di un passaggio. Qualsiasi campo relativo all'esecuzione di un passaggio non viene applicato alle singole iterazioni. I campi della fase si applicano solo a livello di fase, come segue:

  • timeoutSeconds— Tutte le iterazioni del ciclo devono essere eseguite entro il periodo di tempo specificato in questo campo. Se l'esecuzione del ciclo scade, allora AWSTOE esegue la politica di riprova del passaggio e reimposta il parametro di timeout per ogni nuovo tentativo. Se l'esecuzione del ciclo supera il valore di timeout dopo aver raggiunto il numero massimo di tentativi, il messaggio di errore della fase indica che l'esecuzione del ciclo è scaduta.

  • onFailure— La gestione degli errori viene applicata alla fase nel modo seguente:

    • Se onFailureè impostato suAbort, AWSTOE esce dal ciclo e riprova il passaggio in base alla politica sui nuovi tentativi. Dopo il numero massimo di tentativi, AWSTOE contrassegna il passaggio corrente come non riuscito e interrompe l'esecuzione del processo.

      AWSTOE imposta il codice di stato per la fase principale e il documento suFailed.

      Nota

      Nessun altro passaggio viene eseguito dopo il passaggio fallito.

    • Se onFailureè impostato suContinue, AWSTOE esce dal ciclo e riprova il passaggio in base alla politica sui nuovi tentativi. Dopo il numero massimo di tentativi, AWSTOE contrassegna il passaggio corrente come non riuscito e continua a eseguire il passaggio successivo.

      AWSTOE imposta il codice di stato per la fase principale e il documento suFailed.

    • Se onFailureè impostato suIgnore, AWSTOE esce dal ciclo e riprova il passaggio in base alla politica sui nuovi tentativi. Dopo il numero massimo di tentativi, AWSTOE contrassegna il passaggio corrente come IgnoredFailure e continua a eseguire il passaggio successivo.

      AWSTOE imposta il codice di stato per la fase principale e il documento suSuccessWithIgnoredFailure.

      Nota

      Viene comunque considerata un'esecuzione riuscita, ma include informazioni che indicano che uno o più passaggi non sono riusciti e sono stati ignorati.

  • maxAttempts — Per ogni nuovo tentativo, l'intero passaggio e tutte le iterazioni vengono eseguiti dall'inizio.

  • status: lo stato generale dell'esecuzione di un passaggio. statusnon rappresenta lo stato delle singole iterazioni. Lo stato di un passaggio con loop è determinato come segue:

    • Se una singola iterazione non viene eseguita, lo stato di un passaggio indica un errore.

    • Se tutte le iterazioni hanno esito positivo, lo stato di un passaggio indica un successo.

  • startTime — L'ora di inizio complessiva dell'esecuzione di una fase. Non rappresenta l'ora di inizio delle singole iterazioni.

  • endTime — L'ora di fine complessiva dell'esecuzione di un passaggio. Non rappresenta l'ora di fine delle singole iterazioni.

  • failureMessage — Include gli indici di iterazione che hanno avuto esito negativo in caso di errori diversi dal timeout. In caso di errori di timeout, il messaggio indica che l'esecuzione del ciclo non è riuscita. Non vengono forniti messaggi di errore individuali per ogni iterazione per ridurre al minimo la dimensione dei messaggi di errore.

Output di step e iterazione

Ogni iterazione contiene un output. Alla fine di un ciclo, AWSTOE consolida tutti gli output di iterazione riusciti in. detailedOutput.json Gli output consolidati sono una raccolta di valori che appartengono alle chiavi di output corrispondenti, come definito nello schema di output del modulo di azione. L'esempio seguente mostra come vengono consolidati gli output:

Output di ExecuteBash per l'iterazione 1

{ "stdout":"Hello" }

Output di ExecuteBash per l'iterazione 2

{ "stdout":"World" }

Output di ExecuteBash for Step

{ "stdout":"Hello\nWorld" }

Ad esempio ExecuteBashExecutePowerShell, e ExecuteBinary sono moduli di azione che restituiscono STDOUT come output del modulo di azione. STDOUTi messaggi vengono uniti al nuovo carattere di riga per produrre l'output complessivo dello step indetailedOutput.json.

AWSTOE non consoliderà i risultati delle iterazioni non riuscite.