Skip to Content
Atlassian Jiraajatv1.0.xOperaciones de reglas

Operaciones masivas sobre reglas

El grupo de comandos ajat rule muta en masa las reglas de Jira Cloud Automation desde la línea de comandos, en lugar de recorrer la interfaz de Jira regla por regla. Cubre las operaciones masivas que la interfaz de Jira no expone bien: una parada de emergencia durante un incidente, congelar la automatización durante el renombrado de una clave de proyecto o una migración, limpiar reglas señaladas por ajat report consistency y recalibrar el alcance de reglas ante cambios organizativos.

Cada mutación de ajat rule actúa sobre tu tenant de Jira Cloud en vivo. Estos comandos son plan previo: las reglas coincidentes se imprimen como un plan antes de cualquier llamada a la API, y nada se aplica hasta que confirmas. Usa —dry-run para previsualizar y salir; usa —yes para omitir la confirmación en automatización. Las reglas se seleccionan desde tu catálogo de exportación local, así que refresca la exportación primero.

ajat funciona únicamente con Atlassian Jira Cloud Automation. No es compatible con Jira Server ni con Jira Data Center.

Subcomandos

Cuatro subcomandos de mutación más un subcomando de descubrimiento de solo lectura comparten el mismo vocabulario de selectores y el mismo modelo de seguridad:

SubcomandoEndpoint de la APIEfecto
ajat rule enablePUT /rest/v1/rule/{uuid}/stateActiva las reglas coincidentes para que vuelvan a dispararse
ajat rule disablePUT /rest/v1/rule/{uuid}/stateDesactiva las reglas coincidentes para que dejen de dispararse
ajat rule deleteDELETE /rest/v1/rule/{uuid}Elimina las reglas coincidentes (solo reglas desactivadas)
ajat rule scope setPUT /rest/v1/rule/{uuid}/rule-scopeReemplaza, añade o elimina ARIs de alcance
ajat rule manual listPOST /rest/v1/rule/manual/searchLista reglas de disparo manual (solo lectura)

Vocabulario de selectores

Cada subcomando de mutación acepta los mismos flags de selector. Los selectores se combinan con AND y al menos uno es obligatorio. La fuente de verdad para la coincidencia es tu catálogo de exportación local, indicado con --input-dir: el selector se evalúa contra la realidad en disco sin una ronda extra a la API.

FlagDescripción
--uuid <uuid>Selecciona una regla concreta por UUID. Repetible.
--from-file <path>Archivo de UUIDs separados por líneas (se ignoran líneas en blanco y comentarios #).
--label <label>Selecciona reglas que llevan esta etiqueta. Repetible; combinado con AND.
--name-pattern <glob>Glob de shell insensible a mayúsculas sobre el nombre de la regla (p. ej. release-*).
--author <accountId>Selecciona reglas cuyo actor.accountId coincide con este valor.
--scope <ari>Selecciona reglas cuyo ruleScopeARIs contiene este ARI.
--state ENABLED|DISABLEDSelecciona reglas en este estado.
--input-dir <path>Directorio de exportación local usado como fuente de verdad. Obligatorio.

Como el selector lee de la exportación local, una exportación de más de unas pocas horas puede producir una coincidencia obsoleta. Vuelve a exportar inmediatamente antes de cualquier mutación de alto riesgo, luego previsualiza con —dry-run y por último aplica.

Modelo de seguridad

Idéntico al de ajat import: cada mutación está condicionada a una confirmación explícita:

  1. Plan primero. Las reglas coincidentes se imprimen como un plan antes de cualquier llamada a la API.
  2. --dry-run imprime el plan y sale sin preguntar ni mutar.
  3. Confirmación interactiva cuando stdin es un TTY. Responde y / yes para continuar.
  4. --yes omite la confirmación en ejecuciones de CI. Obligatorio cuando stdin no es un TTY.
  5. Cero coincidencias es un error. Una ejecución que no coincide con ninguna regla sale con código distinto de cero, para que un selector mal configurado falle de forma ruidosa en lugar de no hacer nada en silencio.

Códigos de salida

CódigoSignificado
0Todos los objetivos tuvieron éxito.
1Fallo de arranque / configuración / sin coincidencias.
2Al menos una regla falló durante la ejecución.
130Interrumpido por SIGINT / SIGTERM.

Refrescar el catálogo primero

Como el selector lee de la exportación local, el flujo previsto es volver a exportar inmediatamente antes de una mutación, previsualizarla y luego aplicarla:

# 1. Refresca el catálogo local para que el selector coincida con la realidad actual. ajat export --output-dir ./jira-automations-backup # 2. Previsualiza el plan sin tocar el tenant. ajat rule disable --input-dir ./jira-automations-backup <selectors> --dry-run # 3. Aplica. ajat rule disable --input-dir ./jira-automations-backup <selectors> --yes

Mantener la exportación y la mutación como pasos separados también hace que la pregunta “qué ha cambiado desde la última vez que miré” siga siendo respondible desde el archivo de estado de exportación (.ajat_state.json).


ajat rule disable / ajat rule enable

Interruptores de estado. disable apaga las reglas coincidentes para que dejen de dispararse; enable las vuelve a encender. Se envía el mismo cuerpo de estado para cada regla coincidente.

Usos típicos de disable: congelar la automatización durante el renombrado de una clave de proyecto o una migración, una parada de emergencia para reglas que tocan un servicio dependiente en incidente, o preparar una limpieza (desactivar primero y luego eliminar una vez confirmado que es seguro).

Flags

Ambos subcomandos aceptan los flags de selector compartidos más:

FlagPredeterminadoDescripción
--dry-runfalseImprime el plan y sale sin mutar el tenant.
--yesfalseOmite la confirmación interactiva.
--workers4Actualizaciones de estado concurrentes.

Ejemplos

# Previsualiza: ¿qué reglas tocan el proyecto ALPHA? ajat rule disable --input-dir ./jira-automations-backup \ --scope ari:cloud:jira:<tenant>:project/ALPHA --dry-run # Pausa cada regla que toca ALPHA durante una migración. ajat rule disable --input-dir ./jira-automations-backup \ --scope ari:cloud:jira:<tenant>:project/ALPHA --yes # Desactiva una única regla por UUID. ajat rule disable --input-dir ./jira-automations-backup \ --uuid 11111111-2222-3333-4444-555555555555 --yes # Pausa cada regla activa con la etiqueta release-pauseable antes de una ventana de release. ajat rule disable --input-dir ./jira-automations-backup \ --state ENABLED --label release-pauseable --yes # Reactiva todo cuando termine la migración. ajat rule enable --input-dir ./jira-automations-backup \ --scope ari:cloud:jira:<tenant>:project/ALPHA --yes

ajat rule delete

Elimina permanentemente del tenant las reglas coincidentes.

La API de Atlassian solo permite DELETE sobre reglas desactivadas, y ajat aplica la misma restricción por adelantado. Cualquier regla ENABLED capturada por el selector es rechazada en el plan y excluida de la ejecución: se lista aparte en lugar de dejar que el servidor la rechace a mitad de la ejecución.

Como la eliminación es destructiva y solo se aplica a reglas desactivadas, el flujo de limpieza recomendado son dos pasos más un refresco:

# 1. Desactiva las reglas primero. ajat rule disable --input-dir ./jira-automations-backup --label deprecated --yes # 2. Refresca la exportación para que .ajat_state.json refleje el estado DISABLED. ajat export --output-dir ./jira-automations-backup # 3. Elimina — restringir a DISABLED hace explícita la intención. ajat rule delete --input-dir ./jira-automations-backup \ --label deprecated --state DISABLED --yes

Flags

Flags de selector compartidos más:

FlagPredeterminadoDescripción
--dry-runfalseImprime el plan y sale sin eliminar nada.
--yesfalseOmite la confirmación interactiva.
--workers4Llamadas de eliminación concurrentes.

Ejemplos

# Previsualiza: ¿qué reglas desactivadas llevan la etiqueta 'deprecated'? ajat rule delete --input-dir ./jira-automations-backup \ --label deprecated --state DISABLED --dry-run # Elimínalas de verdad. ajat rule delete --input-dir ./jira-automations-backup \ --label deprecated --state DISABLED --yes # Elimina una única regla por UUID (debe estar ya desactivada). ajat rule delete --input-dir ./jira-automations-backup \ --uuid 11111111-2222-3333-4444-555555555555 --yes

ajat rule scope set

Cambia dónde se aplican las reglas coincidentes editando sus ruleScopeARIs (global, de proyecto o multiproyecto). Hay tres modos de actualización mutuamente condicionados:

ModoEfecto
--replace <ari> (repetible)Reemplaza toda la lista de alcance. Pasa --replace sin valor para mover la regla a alcance global (lista vacía).
--add <ari> (repetible)Añade el ARI a la lista actual (idempotente; no-op si ya está presente).
--remove <ari> (repetible)Quita el ARI de la lista actual (no-op si está ausente).

--replace es mutuamente excluyente con --add / --remove; --add y --remove pueden combinarse. La lista de alcance actual se lee del catálogo local, así que --add / --remove nunca consultan una regla antes de mutarla.

El plan incluye una columna NEW SCOPE, para que puedas confirmar el resultado proyectado de cada regla antes de aplicar.

Flags

Flags de selector compartidos más:

FlagPredeterminadoDescripción
--replace <ari>[]Reemplaza ruleScopeARIs con la lista de ARIs dada (repetible; sin valor para global).
--add <ari>[]Añade un ARI a ruleScopeARIs (repetible, idempotente).
--remove <ari>[]Quita un ARI de ruleScopeARIs (repetible, no-op si está ausente).
--dry-runfalseImprime el plan y sale sin mutar el tenant.
--yesfalseOmite la confirmación interactiva.
--workers4Actualizaciones de alcance concurrentes.

Ejemplos

# Previsualiza: añade un proyecto a cada regla con la etiqueta shared-trigger. ajat rule scope set --input-dir ./jira-automations-backup --label shared-trigger \ --add ari:cloud:jira:<tenant>:project/NEW-PROJ --dry-run # Mueve una regla a alcance global (lista de alcance vacía). ajat rule scope set --input-dir ./jira-automations-backup \ --uuid 11111111-2222-3333-4444-555555555555 --replace --yes # Reemplaza el alcance de una regla con dos ARIs de proyecto. ajat rule scope set --input-dir ./jira-automations-backup \ --uuid 11111111-2222-3333-4444-555555555555 \ --replace ari:cloud:jira:<tenant>:project/PROJ-A \ --replace ari:cloud:jira:<tenant>:project/PROJ-B --yes

ajat rule manual list

Las reglas manuales — las que aparecen como botones en la interfaz de Jira (“Trigger rule”) — son un subconjunto del patrimonio de automatización completo. ajat rule manual list las enumera y es de solo lectura: no dispara ni modifica nada.

La API de Automation limita la búsqueda a ARIs de objetivo concretos; no existe un endpoint del servidor para “listar todas las reglas manuales”. Pasa uno o más valores --target y/o una ruta --from-file. Cada --target acepta una clave de incidencia de Jira o un ARI de objeto: las claves de incidencia se resuelven a ARIs antes de la llamada a la API.

Flags

FlagPredeterminadoDescripción
--target <key|ari>[]ARI de objetivo o clave de incidencia de Jira. Repetible.
--from-file <path>(ninguno)Archivo con un objetivo por línea (se ignoran líneas en blanco y comentarios #).
--format table|jsontableFormato de salida.
--limit <n>0Se detiene tras como máximo esta cantidad de coincidencias (0 = sin límite).
--page-size <n>100Tamaño de página de reglas manuales (1..100).

Ejemplos

# ¿Qué reglas manuales aplican a una única incidencia? ajat rule manual list --target ACME-123 # Varios objetivos, mezclando claves de incidencia y ARIs. ajat rule manual list \ --target ACME-1 \ --target ari:cloud:jira:<tenant>:issue/10002 # Objetivos masivos desde un archivo (uno por línea; se permiten comentarios #). ajat rule manual list --from-file ./targets.txt # Legible por máquina: extrae los UUIDs de las reglas coincidentes. ajat rule manual list --target ACME-1 --format json | jq '.matches[].uuid'

Usa los UUIDs de la salida como primer argumento posicional de ajat invoke para disparar de verdad una regla manual contra un conjunto de objetivos.


Relacionado

  • Export — produce el catálogo que lee el selector; refréscalo antes de cada mutación.
  • Reportsreport consistency señala reglas obsoletas, mal etiquetadas o duplicadas; combínalo con rule disable / rule delete para actuar sobre las recomendaciones.
  • Invoke — dispara las reglas manuales descubiertas por rule manual list.
  • Import — el otro comando de mutación; comparte este mismo modelo de seguridad de plan previo.
Last updated on