Referencia del manifiesto

Referencia completa de campos para el manifiesto YAML v2 de SteadyCron — jobs, canales, reglas, variables, tags y namespaces.

El manifiesto v2 es la definición autorizada de su cuenta de SteadyCron. Un único archivo (o un directorio de archivos) declara cada job, canal de alerta, tag y variable que gestiona la CLI.

Estructura de nivel superior

namespace: my-app        # opcional — delimita la propiedad de IaC
variables:               # variables de plantilla del servidor (lista de objetos)
channels:                # definiciones de canales de alerta
tags:                    # definiciones de tags reutilizables
shaping:                 # límites de tasa
jobs:                    # jobs HTTP y checks de heartbeat
                         # las reglas de alerta se declaran por job bajo jobs[].rules

namespace

Una cadena que asigna un scope a todos los recursos de este manifiesto. La CLI solo gestiona (y con --prune, solo elimina) los recursos que pertenecen a este namespace — de modo que los jobs gestionados por IaC y los creados manualmente pueden coexistir de forma segura en la misma cuenta.

namespace: production

Si se omite namespace, se usa el namespace por defecto. Consulte Namespaces y propiedad para configuraciones de múltiples entornos.

jobs[]

Cada entrada es un job HTTP (kind: http) que llama a su endpoint según un calendario, o un check de heartbeat (kind: heartbeat) que espera un ping de su propio cron.

Campos comunes

CampoTipoRequeridoDescripción
idstringNoClave de reconciliación estable. Cuando se define, los renombrados son seguros — el id nunca cambia, por lo que las URLs de ping de heartbeat se conservan. Recurre a name si está ausente.
namestringNombre de visualización en el dashboard y en los mensajes de alerta. Debe ser único en el manifiesto.
kindhttp | heartbeatNoTipo de job. Por defecto: http.
schedulestring*Expresión cron de cinco campos (minute hour dom month dow).
intervalinteger*Intervalo fijo en segundos (10–86400). Alternativa a schedule.
timezonestringNoNombre de zona horaria IANA, p. ej. Europe/Berlin. Por defecto: UTC.
pausedbooleanNoCrear o mantener el job en estado suspendido.
tagsstring[]NoReferencias de tags como cadenas "key:value", p. ej. ["env:prod", "team:backend"].
rulesobject[]NoReglas de alerta por job. Véase Reglas de alerta.

*Se requiere exactamente uno de schedule o interval.

Campos de jobs HTTP

CampoTipoRequeridoDescripción
methodstringNoMétodo HTTP. Uno de GET, POST, PUT, PATCH, DELETE. Por defecto: GET.
urlstringEndpoint a llamar. Admite marcadores ${ENV} (sustitución CLI) y {{template_var}} (servidor).
headersobjectNoCabeceras de solicitud adicionales. Los valores admiten marcadores ${ENV}.
bodystringNoCuerpo de la solicitud. Admite marcadores {{template_var}}.
timeoutintegerNoTiempo de espera de la solicitud en segundos. Por defecto: 60.
retriesintegerNoNúmero de reintentos ante respuesta no-2xx o timeout. Por defecto: 0.
retry_backoffintegerNoSegundos entre reintentos. Por defecto: 30.
retry_on_timeoutbooleanNoContar los timeouts como fallos para los reintentos. Por defecto: true.
retry_on_statusinteger[]NoCódigos de estado HTTP que activan un reintento (100–599).
skip_if_runningbooleanNoOmitir la ejecución si la anterior todavía está activa. Por defecto: false.
misfire_policystringNoComportamiento cuando se pierde una ejecución programada: do_nothing (por defecto) o fire_once_now.

Campos de checks de heartbeat

CampoTipoRequeridoDescripción
graceintegerNoSegundos a esperar tras el tiempo de ping esperado antes de alertar. Por defecto: 60.
stuck_run_detectionbooleanNoAlerta cuando una ejecución supera max_run_duration. Por defecto: true.
max_run_durationintegerNoDuración máxima permitida de ejecución en segundos (60–86400).

channels[]

Canales de alerta referenciados por las reglas de job mediante su id o name.

CampoTipoRequeridoDescripción
idstringNoClave de referencia estable usada en jobs[].rules[].channel.
namestringNombre legible mostrado en el dashboard y en los mensajes de alerta.
kindstringUno de slack, discord, email, telegram, webhook.
configobjectNoConfiguración clave-valor específica del tipo. Use marcadores ${ENV} — nunca committe secrets reales.
channels:
  - id: ops-slack
    name: Slack #ops
    kind: slack
    config:
      webhook_url: ${SLACK_WEBHOOK_URL}

Reglas de alerta {#alert-rules}

Las reglas de alerta se definen por job bajo jobs[].rules. Cada regla vincula un evento desencadenador con un canal de notificación.

jobs:
  - id: weekly-digest
    name: Weekly digest email
    kind: http
    schedule: "0 9 * * 1"
    url: https://api.myapp.com/jobs/digest
    rules:
      - channel: ops-slack
        trigger: on_failure
        severity: p1
      - channel: ops-slack
        trigger: on_recovery
CampoTipoRequeridoDescripción
channelstringid o name del canal a notificar.
triggerstringEvento que activa la regla: on_failure, on_recovery, on_missed_heartbeat.
severitystringNoEtiqueta de severidad enviada al canal (p. ej. p1, p2, p3).
paramsobjectNoParámetros específicos del desencadenador.
dedup_window_secondsintegerNoVentana de deduplicación de alertas en segundos.

tags[]

Los tags agrupan jobs en el dashboard. Cada tag tiene una key y un value; los jobs los referencian como cadenas "key:value".

tags:
  - id: env-prod
    key: env
    value: prod
  - id: team-backend
    key: team
    value: backend

Referencia en un job: tags: ["env:prod", "team:backend"]

CampoTipoRequeridoDescripción
idstringNoClave de referencia estable.
keystringCategoría del tag (p. ej. env, team).
valuestringValor del tag (p. ej. prod, backend).
colorstringNoCódigo de color hexadecimal para el dashboard.

variables

Variables de plantilla del servidor. Cada variable es un objeto con id, name y value. La CLI resuelve ${ENV_VAR} en value al aplicar; el servidor sustituye {{name}} en los campos HTTP del job al ejecutar. Los secrets nunca acaban en git.

variables:
  - id: digest-token
    name: digest_token
    value: ${DIGEST_TOKEN}

Use {{digest_token}} en los campos HTTP url, headers o body.

CampoTipoRequeridoDescripción
idstringNoClave de referencia estable.
namestringNombre de variable usado en sustituciones {{name}} del servidor.
valuestringNoValor de la variable. Admite sustitución CLI ${ENV_VAR}.

shaping

El shaping de solicitudes controla la concurrencia y los límites de tasa para jobs HTTP — útil cuando muchos jobs se disparan en el mismo minuto y necesita distribuir la carga.

shaping:
  max_concurrent_jobs: 5
  max_jobs_per_minute: 30
CampoTipoDescripción
max_concurrent_jobsintegerNúmero máximo de jobs HTTP ejecutándose en paralelo.
max_jobs_per_minuteintegerNúmero máximo de ejecuciones de jobs HTTP por minuto.

Ejemplo completo

namespace: production

variables:
  - id: digest-token
    name: digest_token
    value: ${DIGEST_TOKEN}

channels:
  - id: ops-slack
    name: Slack #ops
    kind: slack
    config:
      webhook_url: ${SLACK_WEBHOOK_URL}

tags:
  - id: env-prod
    key: env
    value: prod
  - id: team-backend
    key: team
    value: backend

jobs:
  - id: weekly-digest
    name: Weekly digest email
    kind: http
    method: POST
    url: https://api.myapp.com/jobs/digest
    schedule: "0 9 * * 1"
    timezone: Europe/Berlin
    timeout: 120
    retries: 3
    tags: ["env:prod", "team:backend"]
    rules:
      - channel: ops-slack
        trigger: on_failure
        severity: p1
      - channel: ops-slack
        trigger: on_recovery

  - id: nightly-backup
    name: Nightly DB backup
    kind: heartbeat
    schedule: "0 2 * * *"
    grace: 1800
    tags: ["env:prod"]
    rules:
      - channel: ops-slack
        trigger: on_missed_heartbeat
        severity: p1

Secrets: dos mecanismos en paralelo

${ENV_VAR_NAME}{{template_var}}
Resuelto porCLI al aplicarServidor al ejecutar
Funciona enCualquier campoSolo url, headers, body de jobs HTTP
Úselo paraClaves de API, URLs de webhook, valores específicos del entornoValores dinámicos por ejecución
Exportado comoMarcador ${VAR}Marcador {{var}}

steadycron export emite ambos tipos de marcadores de posición donde detecta un secret o una variable de plantilla, por lo que el manifiesto exportado es seguro para committear tal cual.