Usar constructos en bucle en TOE de AWS - Generador de Imágenes de EC2

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Usar constructos en bucle en TOE de AWS

En esta sección se proporciona información que le ayudará a crear constructos en bucle en TOE de AWS. Los constructos en bucle definen una secuencia repetida de instrucciones. Puede utilizar los siguientes tipos de constructos en bucle en TOE de AWS:

  • Constructos for: se repiten en iteraciones sobre una secuencia acotada de números enteros.

  • Constructos forEach

    • Bucle forEach con lista de entradas: se repite en iteraciones sobre una colección finita de cadenas.

    • Bucle forEach con lista delimitada: repite una colección finita de cadenas unidas por un delimitador.

nota

Los constructos en bucle solo admiten tipos de datos de cadena.

Variables de iteración de referencia

Para hacer referencia al índice y al valor de la variable de iteración actual, la expresión de referencia {{ loop.* }} debe usarse en el cuerpo de entrada de un paso que contenga un constructo en bucle. Esta expresión no se puede utilizar para hacer referencia a las variables de iteración del constructo en bucle de otro paso.

La expresión de referencia consta de los siguientes miembros:

  • {{ loop.index }}: la posición ordinal de la iteración actual, que está indexada en 0.

  • {{ loop.value }}: el valor asociado a la variable de iteración actual.

Nombres de bucles

Todos los constructos en bucle tienen un campo de nombre opcional para su identificación. Si se proporciona un nombre de bucle, este se puede utilizar para hacer referencia a las variables de iteración del cuerpo de entrada del paso. Para hacer referencia a los índices y valores de iteración de un bucle denominado, utilice {{ <loop_name>.* }} con {{ loop.* }} en el cuerpo de entrada del paso. Esta expresión no se puede utilizar para hacer referencia al constructo en bucle denominado de otro paso.

La expresión de referencia consta de los siguientes miembros:

  • {{ <loop_name>.index }}: la posición ordinal de la iteración actual del bucle denominado, que está indexada en 0.

  • {{ <loop_name>.value }} : el valor asociado a la variable de iteración actual del bucle denominado.

Resolución de expresiones de referencia

TOE de AWS Resuelve las expresiones de referencia de la siguiente manera:

  • {{ <loop_name>.* }}— TOE de AWS resuelve esta expresión mediante la siguiente lógica:

    • Si el bucle del paso que se está ejecutando actualmente coincide con el valor <loop_name>, la expresión de referencia se convierte en el constructo en bucle del paso que se está ejecutando actualmente.

    • <loop_name> se resuelve en el constructo de bucle denominado si aparece dentro del paso que se está ejecutando actualmente.

  • {{ loop.* }}— TOE de AWS resuelve la expresión mediante la construcción de bucle definida en el paso que se está ejecutando actualmente.

Si se utilizan expresiones de referencia en un paso que no contiene un bucle, TOE de AWS no resuelve las expresiones y aparecen en el paso sin sustituirlas.

nota

Las expresiones de referencia deben estar entre comillas dobles para que el compilador YAML las interprete correctamente.

Tipos de constructos en bucle

Esta sección contiene información y ejemplos sobre los tipos de constructos en bucle que se pueden utilizar en TOE de AWS.

Bucle for

El bucle for itera en un rango de enteros especificado dentro de un límite delimitado por el inicio y el final de las variables. Los valores iterativos están en el conjunto [start, end] e incluyen los valores límite.

TOE de AWS verifica los updateBy valores startend, y para garantizar que la combinación no dé como resultado un bucle infinito.

Esquema de bucle for

- name: "StepName" action: "ActionModule" loop: name: "string" for: start: int end: int updateBy: int inputs: ...
Entrada de bucle for
Campo Descripción Tipo Obligatoria Predeterminado

name

Nombre único del bucle. Debe ser único en comparación con otros nombres de bucles de la misma fase.

Cadena

No

""

start

Valor inicial de la iteración. No acepta expresiones encadenadas.

Entero

n/a

end

Valor final de la iteración. No acepta expresiones encadenadas. Entero n/a

updateBy

Diferencia por la que un valor iterativo se actualiza mediante la adición. Debe ser un valor negativo o positivo distinto de cero. No acepta expresiones encadenadas. Entero n/a

Ejemplo de entrada de bucle for

- 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

Bucle forEach con lista de entradas

El bucle forEach itera en una lista explícita de valores, que pueden ser cadenas y expresiones encadenadas.

Bucle forEach con esquema de lista de entrada

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: - "string" inputs: ...
Bucle forEach con entrada de lista de entrada
Campo Descripción Tipo Obligatoria Predeterminado

name

Nombre único del bucle. Debe ser único en comparación con otros nombres de bucles de la misma fase.

Cadena

No

""

Lista de cadenas de bucle forEach

Lista de cadenas para la iteración. Acepta expresiones encadenadas como cadenas en la lista. Las expresiones encadenadas deben estar entre comillas dobles para que el compilador YAML las interprete correctamente.

Lista de cadenas

n/a

Bucle forEach con lista de entradas (ejemplo 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

Bucle forEach con lista de entradas (ejemplo 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 }}"

Bucle forEach con lista de entradas (ejemplo 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 }}"

Bucle forEach con lista delimitada

El bucle itera sobre una cadena que contiene valores separados por un delimitador. Para recorrer en iteración los componentes de la cadena, TOE de AWS utiliza el delimitador para dividir la cadena en una matriz adecuada para la iteración.

Bucle forEach con esquema de lista delimitada

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: list: "string" delimiter: ".,;:\n\t -_" inputs: ...
Bucle forEach con entrada de lista delimitada
Campo Descripción Tipo Obligatoria Predeterminado

name

Nombre único del bucle. Debe ser único en comparación con otros nombres de bucles de la misma fase.

Cadena

No

""

list

Cadena compuesta por cadenas constitutivas unidas por un carácter delimitador común. También acepta expresiones encadenadas. En el caso de expresiones encadenadas, asegúrese de que estén entre comillas dobles para que el compilador de YAML las interprete correctamente. Cadena

n/a

delimiter

Carácter que se usa para separar las cadenas dentro de un bloque. El valor predeterminado es el carácter de coma. Solo se permite un carácter delimitador de la lista dada:
  • Punto: "."

  • Coma: ","

  • Punto y coma: ";"

  • Dos puntos: ":"

  • Nueva línea: "\n"

  • Tabulador: "\t"

  • Espacio: " "

  • Guion: "-"

  • Guion bajo: "_"

No se pueden utilizar expresiones encadenadas.

Cadena No Coma: ","
nota

El valor de list se trata como una cadena inmutable. Si la fuente de list se cambia durante el tiempo de ejecución, no se reflejará durante la ejecución.

Bucle forEach con lista delimitada (ejemplo 1)

Este ejemplo utiliza el siguiente patrón de expresión de encadenamiento para hacer referencia al resultado de otro paso:. <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 }}"

Bucle forEach con lista delimitada (ejemplo 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 }}"

Campos de pasos

Los bucles son parte de un paso. Los campos relacionados con la ejecución de un paso no se aplican a las iteraciones individuales. Los campos de paso se aplican solo a nivel del paso, de la siguiente manera:

  • timeoutSeconds: todas las iteraciones del bucle deben ejecutarse dentro del período de tiempo especificado en este campo. Si se agota el tiempo de espera del bucle, se TOE de AWS ejecuta la política de reintentos del paso y se restablece el parámetro de tiempo de espera para cada nuevo intento. Si la ejecución del bucle supera el valor de tiempo de espera tras alcanzar el número máximo de reintentos, el mensaje de error del paso indica que se ha agotado el tiempo de espera de la ejecución del bucle.

  • onFailure: la administración de errores se aplica al paso de la siguiente manera:

    • Si OnFailure está establecido enAbort, TOE de AWS sale del bucle y vuelve a intentar el paso según la política de reintentos. Tras el número máximo de reintentos, TOE de AWS marca el paso actual como fallido y detiene la ejecución del proceso.

      TOE de AWS establece el código de estado de la fase principal y el documento en. Failed

      nota

      No se ejecutarán más pasos después del paso con errores.

    • Si onFailure está establecido como Continue, TOE de AWS sale del bucle y vuelve a intentar el paso de acuerdo con la política de reintentos. Tras el número máximo de reintentos, TOE de AWS marca el paso actual como fallido y continúa con el paso siguiente.

      TOE de AWS establece el código de estado de la fase principal y el documento en. Failed

    • Si onFailure está establecido como Ignore, TOE de AWS sale del bucle y vuelve a intentar el paso de acuerdo con la política de reintentos. Tras el número máximo de reintentos, TOE de AWS marca el paso actual como IgnoredFailure y continúa hasta ejecutar el paso siguiente.

      TOE de AWS establece el código de estado de la fase principal y el documento en. SuccessWithIgnoredFailure

      nota

      Esto sigue considerándose una ejecución correcta, pero incluye información que le permite saber que uno o más pasos tienen errores y se ignoraron.

  • maxAttempts: para cada reintento, todo el paso y todas las iteraciones se ejecutan desde el principio.

  • status: el estado general de la ejecución de un paso. status no representa el estado de las iteraciones individuales. El estado de un paso con bucles se determina de la siguiente manera:

    • Si no se puede ejecutar una sola iteración, el estado de un paso indica que se ha producido un error.

    • Si todas las iteraciones se realizan correctamente, el estado de un paso indica que se ha realizado correctamente.

  • startTime: hora de inicio general de la ejecución de un paso. No representa la hora de inicio de las iteraciones individuales.

  • endTime: la hora de finalización general de la ejecución de un paso. No representa la hora de finalización de las iteraciones individuales.

  • failureMessage: incluye los índices de iteración que fallaron en caso de errores sin tiempo de espera. En caso de errores de tiempo de espera, el mensaje indica que se produjo un error en la ejecución del bucle. No se proporcionan mensajes de error individuales para cada iteración para minimizar el tamaño de los mensajes de error.

Salidas de paso e iteración

Cada iteración contiene una salida. Al final de una ejecución en bucle, TOE de AWS consolida todos los resultados de la iteración correcta. detailedOutput.json Las salidas consolidadas son una recopilación de valores que pertenecen a las claves de salida correspondientes, como se define en el esquema de salida del módulo de acción. El siguiente ejemplo muestra cómo se consolidan las salidas:

Salida de ExecuteBash para la iteración 1

{ "stdout":"Hello" }

Salida de ExecuteBash para la iteración 2

{ "stdout":"World" }

Salida de ExecuteBash para el paso

{ "stdout":"Hello\nWorld" }

Por ejemplo, ExecuteBash, ExecutePowerShell y ExecuteBinary son módulos de acción que se devuelven STDOUT como salida del módulo de acción. Los mensajes STDOUT se unen con el carácter de la nueva línea para producir la salida general del paso en detailedOutput.json.

TOE de AWS no consolidará los resultados de las iteraciones fallidas.