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:
| Subcomando | Endpoint de la API | Efecto |
|---|---|---|
ajat rule enable | PUT /rest/v1/rule/{uuid}/state | Activa las reglas coincidentes para que vuelvan a dispararse |
ajat rule disable | PUT /rest/v1/rule/{uuid}/state | Desactiva las reglas coincidentes para que dejen de dispararse |
ajat rule delete | DELETE /rest/v1/rule/{uuid} | Elimina las reglas coincidentes (solo reglas desactivadas) |
ajat rule scope set | PUT /rest/v1/rule/{uuid}/rule-scope | Reemplaza, añade o elimina ARIs de alcance |
ajat rule manual list | POST /rest/v1/rule/manual/search | Lista 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.
| Flag | Descripció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|DISABLED | Selecciona 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:
- Plan primero. Las reglas coincidentes se imprimen como un plan antes de cualquier llamada a la API.
--dry-runimprime el plan y sale sin preguntar ni mutar.- Confirmación interactiva cuando stdin es un TTY. Responde
y/yespara continuar. --yesomite la confirmación en ejecuciones de CI. Obligatorio cuando stdin no es un TTY.- 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ódigo | Significado |
|---|---|
0 | Todos los objetivos tuvieron éxito. |
1 | Fallo de arranque / configuración / sin coincidencias. |
2 | Al menos una regla falló durante la ejecución. |
130 | Interrumpido 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> --yesMantener 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:
| Flag | Predeterminado | Descripción |
|---|---|---|
--dry-run | false | Imprime el plan y sale sin mutar el tenant. |
--yes | false | Omite la confirmación interactiva. |
--workers | 4 | Actualizaciones 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 --yesajat 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 --yesFlags
Flags de selector compartidos más:
| Flag | Predeterminado | Descripción |
|---|---|---|
--dry-run | false | Imprime el plan y sale sin eliminar nada. |
--yes | false | Omite la confirmación interactiva. |
--workers | 4 | Llamadas 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 --yesajat 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:
| Modo | Efecto |
|---|---|
--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:
| Flag | Predeterminado | Descripció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-run | false | Imprime el plan y sale sin mutar el tenant. |
--yes | false | Omite la confirmación interactiva. |
--workers | 4 | Actualizaciones 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 --yesajat 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
| Flag | Predeterminado | Descripció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|json | table | Formato de salida. |
--limit <n> | 0 | Se detiene tras como máximo esta cantidad de coincidencias (0 = sin límite). |
--page-size <n> | 100 | Tamañ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.
- Reports —
report consistencyseñala reglas obsoletas, mal etiquetadas o duplicadas; combínalo conrule disable/rule deletepara 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.