🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónReglas, conjuntos y evaluación en Rego
5 tareas · 36 min · Principiante
En el módulo 13 viste qué debe vigilar una política de infraestructura. Aquí aprendes el lenguaje en que se escribe: Rego. No funciona como los lenguajes que conoces: no ejecuta instrucciones en orden, declara reglas y el motor decide qué se cumple. Esa diferencia explica errores que no dan ningún aviso: una regla que no se cumple por una condición mal pensada simplemente no dice nada, y una política callada se confunde con una política que aprueba. En Bahareque Constructora lees dos archivos de reglas, la entrada que evalúan y el único error que el motor sí grita.
Objetivo de la sala
En el módulo 13 viste qué debe vigilar una política de infraestructura. Aquí aprendes el lenguaje en que se escribe: Rego. No funciona como los lenguajes que conoces: no ejecuta instrucciones en orden, declara reglas y el motor decide qué se cumple. Esa diferencia explica errores que no dan ningún aviso: una regla que no se cumple por una condición mal pensada simplemente no dice nada, y una política callada se confunde con una política que aprueba. En Bahareque Constructora lees dos archivos de reglas, la entrada que evalúan y el único error que el motor sí grita.En Rego hay dos formas de definir una regla. Una regla de conjunto parcial (deny contains msg if { ... }) construye un conjunto: cada vez que el cuerpo se cumple, añade un elemento. Puedes escribir varias definiciones con el mismo nombre, incluso en archivos distintos, y el resultado es la unión de todas. Así funcionan deny y warn en Conftest: cada elemento del conjunto es un mensaje de fallo o de advertencia.
Una regla completa (nivel := "alto" if { ... }) produce un único valor. Si dos definiciones se cumplen a la vez con valores distintos, el motor no elige: devuelve un error de conflicto. Eso es lo contrario de lo que pasa con los conjuntos, y es la razón de que una misma entrada pueda ir bien con una política y romperla con otra.
Responde para continuar
¿Por qué varias definiciones de `deny` conviven sin conflicto y dos definiciones de una regla completa pueden chocar?
Ver pista de ayuda
Piensa en qué devuelve cada tipo de regla, un conjunto de elementos o un único valor.
Para saber qué hace una política no hace falta ejecutarla: se lee la regla y se aplican sus condiciones a la entrada. Cada línea del cuerpo es una condición, y todas deben cumplirse para que el elemento entre en el conjunto. some regla in input.reglas_entrada recorre la lista: el cuerpo se evalúa una vez por cada regla de entrada, y cada coincidencia añade un mensaje.
Abre la política de despliegue y la entrada de la bodega. Aplica las condiciones a cada regla de entrada.
Responde para continuar
¿Cuántos mensajes de denegación (`deny`) produce la política sobre sg-bodega.json?
Ver pista de ayuda
Con la terminal, `cat politicas/despliegue.rego` y `cat entrada/sg-bodega.json`. Una regla de entrada se deniega solo si su origen es todo internet Y su puerto está en el conjunto de administración.
En Rego una expresión puede ser verdadera, falsa o indefinida (cuando se refiere a algo que no existe). El cuerpo de una regla se detiene en cuanto una condición es falsa o indefinida, y la regla simplemente no produce nada. not x es verdadero cuando x es indefinido o falso. Pero un texto vacío no es ni lo uno ni lo otro: es un valor definido y, para Rego, cuenta como presente.
La regla de advertencia de la política usa not regla.descripcion para detectar reglas sin descripción. Mira qué valor trae cada regla de entrada en ese campo.
Responde para continuar
Escribe el id de la regla de entrada que tiene el campo descripcion presente pero vacío y por eso la advertencia no la detecta.
Ver pista de ayuda
Abre `entrada/sg-bodega.json` y busca la descripción que está entre comillas pero no dice nada.
El conflicto entre reglas completas es uno de los pocos fallos de Rego que no se queda en silencio: el motor lo reporta como un error de evaluación. Es una ventaja: se ve. Pero solo se ve si alguien lee la salida; un trabajo de CI que ignora el código de salida lo enterraría.
Mira el archivo de reglas de riesgo y la salida de la consulta que hizo el equipo.
Responde para continuar
Escribe el nombre de la regla completa que produce el error de conflicto con la entrada de la bodega.
Ver pista de ayuda
Lee `salida/conflicto.txt` y confirma con `cat politicas/riesgo.rego` que las dos definiciones se cumplen a la vez con esa entrada.
La advertencia debería cubrir dos casos: el campo ausente y el campo vacío. Corregirla pide decidir qué significa «sin descripción» y escribir esa decisión en la regla, no esperar a que el motor adivine la intención del autor.
Responde para continuar
¿Cómo se corrige la advertencia para que detecte también las descripciones vacías?
Ver pista de ayuda
Hay que cubrir los dos casos y dejar una prueba que lo demuestre.
Whoami-Labs Pro
Whoami-Labs Pro utiliza cookies
Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.