Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

Esta es documentación inédita para Admission Controller 1.34-dev.

Creación de una directiva

Como ejemplo, creas una directiva de validación simple que procesa las solicitudes de creación de Pods.

La directiva examina el atributo metadata.name del Pod y rechaza los Pods que tienen un nombre inválido. Su lista de nombres inválidos debería ser configurable por los usuarios finales de la directiva.

Los ajustes de la directiva son algo como:

invalid_names:
- bad_name1
- bad_name2

La directiva debería aceptar la creación de un Pod como el siguiente:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest

Debería rechazar la creación de un Pod como:

apiVersion: v1
kind: Pod
metadata:
  name: bad_name1
spec:
  containers:
    - name: nginx
      image: nginx:latest

Estructurando el nuevo proyecto de directiva

Puedes crear un nuevo proyecto de directiva utilizando cargo generate con el proyecto plantilla.

Primero, instala cargo-generate. Esto requiere openssl-devel.

cargo install cargo-generate

Ahora estructura el proyecto de la siguiente manera:

cargo generate --git https://github.com/kubewarden/rust-policy-template \
               --branch main \
               --name demo

El comando produce una salida como:

🔧   Creating project called `+demo+`...
✨   Done! New project created /<some-path-name>/demo

Esto crea el nuevo proyecto de directiva en el subdirectorio demo.

Si planeas hacer uso de la funcionalidad del registro de contenedores de GitHub en la demostración, necesitas habilitar el soporte mejorado para contenedores.

Evaluación

Puedes probar:

cargo test

Esto prueba la estructura generada. Si todo está correctamente en su lugar, verás una serie de mensajes de compilación que terminan con una salida como:

running 4 tests
test settings::tests::validate_settings ... ok
test tests::accept_request_with_non_pod_resource ... ok
test tests::accept_pod_with_valid_name ... ok
test tests::reject_pod_with_invalid_name ... ok

test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s