• /
  • EnglishEspañolFrançais日本語한국어Português
  • Inicia sesiónComenzar ahora

Te ofrecemos esta traducción automática para facilitar la lectura.

En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.

Crea una propuesta

Esquema de definición del flujo de trabajo

avance

Todavía estamos trabajando en esta característica, ¡pero nos encantaría que la probaras!

Esta característica se proporciona actualmente como parte de un programa de vista previa de conformidad con nuestras políticas de prelanzamiento.

Esquema

Las definiciones de flujo de trabajo se escriben en YAML. Las claves emplean una convención de nomenclatura camelCase.

Propiedades del esquema

Propiedad

Obligatorio u opcional

Tipo

Formato

Restricciones

Descripción

name

Requerido

Cadena

Debe cumplir con las expresiones regulares

^[A-Za-z_][A-Za-z0-9_-]*$

Longitud máxima

: 100

Los valores

name

no distinguen entre mayúsculas y minúsculas. Por ejemplo, se considera que

ExampleWorkflow

,

exampleworkflow

y

EXAMPLEWORKFLOW

representan la misma definición de flujo de trabajo.

description

Opcional

Cadena

Debe cumplir con las expresiones regulares

^[A-Za-z0-9 _-]*$

Longitud máxima

: 200

Un

description

del flujo de trabajo que describe el propósito del flujo de trabajo.

workflowInputs

Opcional

Mapa de mapas

Tamaño máximo

: 100

Un mapa de entradas de flujo de trabajo que acepta el flujo de trabajo. Vea las propiedades detalladas a continuación.

Entradas de flujo de trabajo

Ejemplo:

workflowInputs:
myInput1:
type: String
myInput2:
type: Number
defaultValue: 42
  • workflowInputs.<inputName> (Obligatorio)

    • Tipo: Cadena (conforme al patrón seguro para expresiones)
    • Longitud mínima: 1
    • Longitud máxima: 50
    • Descripción: El nombre de la entrada del flujo de trabajo.
  • workflowInputs.<inputName>.type (Obligatorio)

    • Tipo: Enumeración (Boolean, List, Map, String, Int, Float)
    • Descripción: El tipo de datos de la entrada del flujo de trabajo.
  • workflowInputs.<inputName>.defaultValue (Opcional)

    • Tipo: Cualquiera; debe ajustar a type.
    • Descripción: El valor predeterminado para la entrada del flujo de trabajo.
  • workflowInputs.<inputName>.required (Opcional)

    • Tipo: Booleano (True, False).
    • Descripción: El valor predeterminado de este campo es "Verdadero".
  • workflowInputs.<inputName>.enumValues (Opcional)

    • Tipo: Lista (String).
    • Descripción: El valor predeterminado de este campo es Lista vacía {}. Esto es necesario cuando el tipo de workflowInput es Enum.
  • workflowInputs.<inputName>.validations (Opcional)

    • Tipo: matriz de mapas.
    • Descripción: Las validaciones que se deben realizar en las entradas del flujo de trabajo proporcionadas por el usuario. Este es un campo opcional. Las propiedades descritas aquí están presentes en todos los tipos de validación. Los tipos de validación específicos admiten propiedades adicionales como se analiza en la sección Tipos de validación.
  • validations[*].type (Obligatorio)

    • Tipo: Cadena
    • Descripción: El tipo de validación que indica qué validación se realizará en este campo. Consulte Tipos de validación para obtener más información sobre cada tipo de validación.
  • validations[*].errorMessage (Obligatorio)

    • Tipo: Cadena
    • Descripción: El mensaje de error que el usuario desea recibir cuando falla una validación particular.

Ejemplo de YAML para validaciones

name: calendar_demo
workflowInputs:
timezone:
type: String
defaultValue: 'America/Los_Angeles'
validations:
- type: regex
errorMessage: "The provided timezone is not correct"
pattern: "^[A-Za-z]+\/[A-Za-z_]+(?:\/[A-Za-z_]+)?$"
- type: maxLength
errorMessage: "Timezone length should be less than 100"
length: 100
accountId:
type: Int
validations:
- type: minIntValue
errorMessage: "Account id should be greater than 100000"
minValue: 100000
- type: maxIntValue
errorMessage: "Account id should be less than 9999999"
maxValue: 9999999
steps:
- name: getCurrentTime
type: action
action: http.get
version: 1
inputs:
url: 'https://worldtimeapi.org/api/timezone/${{ .workflowInputs.timezone }}'
selectors:
- name: timezone
expression: '.responseBody | fromjson.abbreviation'
- name: datetime
expression: '.responseBody | fromjson.datetime'

Pasos

Propiedad

Obligatorio u opcional

Tipo

Restricciones

Descripción

steps

Requerido

matriz de mapas

Los pasos a realizar cuando se ejecuta la definición del flujo de trabajo. Debe haber al menos un paso. Las propiedades descritas aquí están presentes en todos los tipos de pasos. Los tipos de pasos específicos admiten propiedades adicionales como se describe en la sección

Tipos de pasos

.

Importante

Los pasos se ejecutan en el orden en que están definidos en la matriz steps. Si se desea un orden diferente, se puede realizar un jump estableciendo la propiedad steps[*].next en el nombre del paso deseado para saltar.

Propiedades comunes de los pasos

Propiedad

Obligatorio u opcional

Tipo

Formato

Restricciones

Descripción

steps[*].name

Requerido

Cadena

Debe cumplir con el

patrón de expresión segura,

no puede ser

end

.

Longitud máxima:

100

El nombre del paso al que hará referencia

steps[*].next

. No pueden ser las palabras clave especiales

end

,

continue

o

break

, ya que se emplean para indicar un paso final, una continuación de un bucle o para salir de un bucle.

steps[*].type

Requerido

Cadena

El tipo de paso, que indica qué hace el paso cuando se ejecuta. Consulte los

tipos de pasos

a continuación para conocer las opciones disponibles.

steps[*].next

Opcional

Cadena

Debe cumplir con el patrón de expresión segura

El nombre del siguiente paso a ejecutar cuando este paso se complete exitosamente. La palabra clave especial end se puede emplear para indicar que este paso debe ser el último en ejecutar. Si se omite

next

, la siguiente entrada en la matriz de definición

steps

se empleará como el siguiente paso implícito. Si no hay ninguna entrada siguiente, se completará el flujo de trabajo.

steps[*].ignoreErrors

Opcional

Booleano

ignoreErrors

es una opción de configuración dentro de un paso de un flujo de trabajo. El valor predeterminado es falso. Al establecer

ignoreErrors

en

true

, el flujo de trabajo garantiza que cualquier error encontrado durante la ejecución de este paso no provocará que todo el flujo de trabajo falle. En su lugar, el flujo de trabajo continuará ejecutando los pasos siguientes.

Tipos de pasos

Acción

Un paso que ejecuta una acción específica. Consulte el catálogo de acciones para conocer las opciones disponibles.

  • steps[*].action (Obligatorio)

    • Tipo: Cadena
    • Descripción: El nombre completo de la función de acción que se va a ejecutar. Deberá seguir la siguiente convención: <company domain>.<category of work>.<action name in camelCase>

Ejemplo:

  • Acción que emplea los servicios de New Relic (por ejemplo, a través de NerdGraph): newrelic.dashboards.getDashboard

  • Acción mediante Slack: slack.chat.postMessage

  • steps[*].version (Obligatorio)

    • Tipo: Cadena
    • Descripción: La versión de la función de acción que se va a ejecutar.
  • steps[*].inputs (Opcional)

    • Tipo: Mapa de valores (incluye expresiones)

    • Descripción:

      • Los datos de entrada que se pasarán a la función de acción. Las entradas específicas aceptadas se definen para cada acción.
      • Las entradas pueden emplear expresiones. Consulte la sección Cadenas de expresión para obtener más detalles.

    Importante

    No se deben pasar datos sensibles (ni claves de API ni secretos, ni PII, PHI ni ningún dato de identificación personal) como argumentos.

  • steps[*].inputs.selectors (Opcional)

    • Tipo: lista de mapas en formato name con expression.

    • Descripción:

      • La entrada selectors le permite redefinir la salida para devolver solo los elementos especificados.
      • Se pueden emplear expresiones. Consulte la sección Cadenas de expresión para obtener más detalles.

Ejemplo:

  • En el ejemplo dado, estamos obteniendo timezone y datetime como respuesta de la acción http.get.
name: calendar_demo
workflowInputs:
timezone:
type: String
defaultValue: 'America/Los_Angeles'
accountId:
type: Int
steps:
- name: getCurrentTime
type: action
action: http.get
version: 1
inputs:
url: 'https://worldtimeapi.org/api/timezone/${{ .workflowInputs.timezone }}'
selectors:
- name: timezone
expression: '.responseBody | fromjson.abbreviation'
- name: datetime
expression: '.responseBody | fromjson.datetime'

Bucle

Un bucle iterará sobre una colección dada definida por in y creará variables de bucle index y element para cada una de sus iteraciones. Estas variables de bucle son accesibles dentro del bucle solo con la expresión ${{ .steps.<loopStepName>.loop.element }} o ${{ .steps.<loopStepName>.loop.index }

Para más detalles:

  • steps[*].for (Obligatorio)

    • Tipo: Constante
    • Descripción: Señal de inicio de un bucle
  • steps[*].in (Obligatorio)

    • Tipo: cadena (expresión)

    • Descripción: Una expresión que debe evaluar como una colección de elementos.

    • steps[*].steps (Opcional)

      • Descripción: Pasos a ejecutar en cada iteración del bucle. Consulte la definición para ver los pasos anteriores.

Ejemplo:

name: myWorkflow
steps:
- name: loopStep
type: loop
for:
in: "${{ [range(1; 5)] }}"
steps:
- name: step1
type: action
action: newrelic.ingest.sendLogs
version: 1
inputs:
logs:
- message: "Loop: ${{ .steps.loopStep.loop.element }}"

Cambiar

  • Un paso que comprueba varias condiciones y toma la primera rama que se evalúa como verdadera.

  • Un conmutador puede contener cualquier número de condition elementos en una lista. Comprobará las condiciones en orden y procesará la primera que evalúe como verdadera. Si ninguno se evalúa como verdadero, ejecutará su paso next como se define en steps[*].next.

    • steps[*].switch (Obligatorio)

      • Tipo: matriz
      • Descripción: Una matriz de casos switch, que especifica la lista ordenada de condiciones a evaluar.
    • steps[*].switch[*].condition (Obligatorio)

      • Tipo: Cadena (expresión)
      • Descripción: El estado de la caja del interruptor. Si se evalúa como verdadero, se ejecutará el paso del caso next.
      • Consulte la sección Cadenas de expresión para obtener más detalles.
    • steps[*].switch[*].next (Obligatorio)

      • Tipo: Cadena (conforme al patrón seguro para expresiones)
      • Descripción: El nombre del paso a ejecutar si la condición del caso se evalúa como verdadera. La palabra clave especial end se puede emplear para indicar que este paso debe ser el último en ejecutar.
    - name: hasCompleted
    type: switch
    switch:
    - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Failed" }}
    next: displayError
    - condition: ${{ .steps.waitForCompletion.outputs.automationExecutionStatus == "Success" }}
    next: displaySuccess
    next: displayUnexpected

Esperar

Un paso que pausa la ejecución del flujo de trabajo durante una cantidad específica de segundos antes de continuar.

El paso de espera también puede escuchar una o más señales. Cada señal debe tener un siguiente paso correspondiente definido en una lista. Si se recibe una señal durante el periodo de espera, se procesará la primera señal recibida y el flujo de trabajo ejecutará el siguiente paso definido. Si no se recibe ninguna señal, el flujo de trabajo continúa normalmente una vez finalizado el periodo de espera.

El valor recibido de una señal se almacena en la salida del paso de espera y se puede emplear en pasos posteriores para lógica o procesamiento.

Ejemplo:

name: waitSignalExample
workflowInputs:
steps:
- name: waitStep
type: wait
seconds: 300
signals: [{name: 'mySignalName', next: 'firstStep'}]
- name: endStep
type: action
action: newrelic.instrumentation.log
version: 1
inputs:
message: "didn't get signal"
next: end
- name: firstStep
type: action
action: newrelic.instrumentation.log
version: 1
inputs:
message: ${{ .steps.waitStep.outputs.signalInputs.myString }}
  • steps[*].seconds (Obligatorio)

    • Tipo: Número
    • Descripción: Número de segundos que se deben esperar antes de continuar con la ejecución del flujo de trabajo.
  • steps[*].signals

    • Tipo: matriz
    • Descripción: Las señales que, al ser recibidas, desviarán el flujo del programa.
  • steps[*].signals[*].name

    • Tipo: Cadena
    • Descripción: El nombre de la señal que se debe escuchar.
  • steps[*].signals[*].next

    • Tipo: Cadena
    • Descripción: Paso a ejecutar si se recibe la señal especificada.

Asignar

Un paso que define variables para usar durante todo el flujo de trabajo. Este paso asigna valores a variables que pueden referenciar en pasos posteriores. Al definir todas las variables en un solo lugar, este tipo de paso hace que el flujo de trabajo sea más legible y optimizado.

Ejemplo de flujo de trabajo:

name: sampleWorkflowWithAssign
description: WorkflowAssignDemo
workflowInputs:
initialValue:
type: String
anotherValue:
type: Int
steps:
- name: runAction
type: action
action: internal.http.post
version: 1
inputs:
url: 'http://localhost:8505/tasks/gc' # temporal-activity-worker-java service port
selectors:
- name: statusCode
expression: '.statusCode'
- name: responseBody
expression: '.responseBody'
- name: variableInitialization
type: assign
inputs:
stringVar: "${{ .workflowInputs.initialValue }}"
intVar: "${{ .workflowInputs.anotherValue }}"
concatenationVar: "${{ .workflowInputs.initialValue }} - concatenated"
booleanVar: true
mapVar:
key1: "value1"
key2: "${{ .workflowInputs.initialValue }}"
listVar:
- "listItem1"
- "${{ .workflowInputs.initialValue }}"
- "${{ .workflowInputs.anotherValue }}"
statusCode: ${{ .steps.runAction.outputs.statusCode }}
- name: wait
type: wait
seconds: 2
- name: logVariables
type: action
action: newrelic.ingest.sendLogs
version: 1
inputs:
logs:
- message: "stringVar: ${{ .steps.variableInitialization.outputs.stringVar }}"
- message: "intVar: ${{ .steps.variableInitialization.outputs.intVar }}"
- message: "concatenationVar: ${{ .steps.variableInitialization.outputs.concatenationVar }}"
- message: "booleanVar: ${{ .steps.variableInitialization.outputs.booleanVar }}"
- message: "mapVar: ${{ .steps.variableInitialization.outputs.mapVar | tojson }}"
- message: "listVar: ${{ .steps.variableInitialization.outputs.listVar | tojson }}"
- message: "statusCode: ${{ .steps.variableInitialization.outputs.statusCode }}"
  • steps[*].inputs (Obligatorio)

    • Tipo: Mapa de valores (incluye expresiones)
    • Descripción:
      • Las entradas son un mapa de nombres de variables y sus valores asignados. Cuando se asignan referencias secretas a variables, permanecen como referencias secretas y no se convierten a sus valores reales. Sin embargo, otras expresiones (como las entradas del flujo de trabajo) se evalúan y se convierten a sus valores reales.
    • Tipos de entrada permitidos: Integer, Double, Boolean, String, Array, Map

Tipos de validación

Tipo de validación

Propiedad

Obligatorio u opcional

Tipo

Descripción

regex

validations[*].pattern

Requerido

Cadena

Valida el valor de entrada del flujo de trabajo contra el patrón de expresión regular proporcionado.

maxIntValue

validations[*].maxValue

Requerido

Entero

Valida que el valor de entrada del flujo de trabajo debe ser menor que el valor máximo proporcionado.

minIntValue

validations[*].minValue

Requerido

Entero

Valida que el valor de entrada del flujo de trabajo debe ser mayor que el valor mínimo proporcionado.

maxLength

validations[*].length

Requerido

Entero

Valida la longitud máxima de las cadenas de entrada del flujo de trabajo y las colecciones (

Array, Set, Map, etc.

).

Tipos compartidos

Cadenas de expresión

Varias propiedades aceptan valores de cadena con expresiones integradas que se evalúan durante la ejecución del flujo de trabajo, lo que permite valores dinámicos en las definiciones del flujo de trabajo.

Las cadenas de expresión pueden contener una o más expresiones, cada una encerrada entre llaves dobles. El contenido dentro de las llaves se evalúa empleando jq, que proporciona poderosas capacidades para acceder y operar con valores.

Ejemplo:

Obtener la longitud de una cadena de entrada de flujo de trabajo:

${{ .workflowInputs.myString | length }}

Para validar y probar sus expresiones, emplee JQ Playground.

Propiedades de expresión

Se puede acceder a varias propiedades con expresiones. Estas propiedades viven en un objeto scope, por lo que las expresiones deben comenzar con un punto (.) para acceder a esas propiedades del objeto de alcance.

Las propiedades disponibles son:

  • workflowInputs - Objeto que contiene las entradas pasadas al flujo de trabajo al inicio.

Ejemplo:

${{ .workflowInputs.myInput }}

  • steps - Objeto que contiene una propiedad para cada paso del flujo de trabajo
  • steps.<stepName> - Objeto que contiene propiedades para un paso específico
  • steps.<stepName>.outputs - Objeto que contiene propiedades de resultado, específicas del paso o acción.

Ejemplo: ${{ .steps.myStep.outputs.myResult }}

Resultados de la evaluación de la expresión

Una sola expresión jq puede evaluar cualquier tipo JSON. Sin embargo, el resultado final de una cadena de expresión depende de si la cadena contiene solo la expresión o contenido adicional.

Expresión única (conserva el tipo JSON):

Si una cadena de expresión consta de una sola expresión sin contenido circundante, se evalúa como el resultado de la expresión jq mientras mantiene su tipo JSON original. Por ejemplo, ${{ .workflowInputs.myArray }} se evalúa como una matriz. Esto es útil para pasar estructuras de datos complejas dentro de un flujo de trabajo.

Expresiones múltiples o contenido mixto (se convierte en cadena):

Si una cadena de expresión contiene contenido distinto a una única expresión, se evalúa como resultado una cadena. Esto ocurre cuando una expresión tiene contenido antes o luego de ella, o cuando la cadena tiene múltiples expresiones dentro de ella. Cada expresión dentro de la cadena se evalúa y se convierte en una representación de cadena.

Importante

Cuando una expresión jq se evalúa como nula, se devuelve un nodo nulo. Por ejemplo, la expresión ${{ .workflowInputs.missingInput }} devuelve nulo si no se proporciona missingInput como entrada del flujo de trabajo.

Ejemplo:

Supongamos que myArray tiene un valor de [1, 2, 3].

Cadena de expresión

Datos de resultados

Tipo de resultado

${{ .workflowInputs.myArray }}

[1, 2, 3]

matriz de números

${{ .workflowInputs.myArray | length }}

3

Número

${{ .workflowInputs.myArray | length > 0 }}

Verdadero

Booleano

Input is not empty: ${{ .workflowInputs.myArray | length > 0 }}

"Input is not empty: true"

Cadena

${{ .workflowInputs.myArray }} has length ${{ .workflowInputs.myArray | length }}

"has length 3"

Cadena

Patrón seguro de expresión

Las propiedades que se pueden emplear en expresiones deben cumplir con: ^[A-Za-z_][A-Za-z0-9_]*$

Referencias secretas

Los valores secretos se pueden usar en acciones a través de cadenas de referencia que especifican el nombre de un secreto que se buscará en el Servicio de Secretos. Para hacer referencia a un secreto en una definición de flujo de trabajo, emplee la siguiente sintaxis:

  • ${{ :secrets:<SECRET_NAME> }} para un secreto que no está en un namespace
  • ${{ :secrets:<NAMESPACE>:<SECRET_NAME> }} para un secreto en un namespace
  • ${{ :secrets:<SCOPE>:<NAMESPACE>:<SECRET_NAME> }} para un secreto en el alcance y namespace. El alcance solo acepta ACCOUNT o ORGANIZATION por ahora.

Una cadena de expresión puede contener una combinación de referencias secretas y expresiones JQ and/or múltiples referencias secretas.

Ejemplos:

steps:
- name: mySecretStep
type: action
action: newrelic.instrumentation.log
inputs:
message: My message
licenseKey: ${{ :secrets:<SECRET_NAME> }}
steps:
- name: bearer_auth
type: action
action: utils.http.post
inputs:
headers:
Authorization: Bearer ${{ :secrets:<SECRET_NAME> }}

Ejemplos

Demostración del calendario

Un ejemplo completo de flujo de trabajo que demuestra múltiples características de flujo de trabajo que incluyen entradas de flujo de trabajo, acciones HTTP, selectores, pasos de espera, consulta NRQL, declaraciones de cambio y notificaciones de Slack.

name: calendar_demo
workflowInputs:
timezone:
type: String
defaultValue: 'America/Los_Angeles'
accountId:
type: Int
steps:
- name: getCurrentTime
type: action
action: http.get
version: 1
inputs:
url: 'https://worldtimeapi.org/api/timezone/${{ .workflowInputs.timezone }}'
selectors:
- name: timezone
expression: '.responseBody | fromjson.abbreviation'
- name: datetime
expression: '.responseBody | fromjson.datetime'
- name: logTime
type: action
action: newrelic.instrumentation.log
version: 1
inputs:
message: 'DEMO: In the ${{ .steps.getCurrentTime.outputs.timezone }} timezone, the current time is ${{ .steps.getCurrentTime.outputs.datetime }}'
licenseKey: ${{ :secrets:STAGING_NEW_RELIC_LICENSE_KEY }}
- name: wait
type: wait
seconds: 1
- name: queryForLog
type: action
action: newrelic.nrql.query
version: 1
inputs:
accountIds: ['${{ .workflowInputs.accountId }}']
query: FROM Log SELECT * WHERE message LIKE 'DEMO:%${{ .steps.getCurrentTime.outputs.datetime }}'
- name: checkQuery
type: switch
switch:
- condition: ${{ .steps.queryForLog.outputs.results | length > 0 }}
next: postResultsMessage
- name: postWaitingMessage
type: action
action: slack.chat.postMessage
version: 1
inputs:
channel: test-channel-workflow
text: Waiting for log message...
token: ${{ :secrets:dn_staging_slack_token }}
next: wait
- name: postResultsMessage
type: action
action: slack.chat.postMessage
version: 1
inputs:
channel: test-channel-workflow
text: 'Found log message! ${{ .steps.queryForLog.outputs.results[0].message }}'
token: ${{ :secrets:dn_staging_slack_token }}
Copyright © 2025 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.