Publish new certification - cniackz/public GitHub Wiki
Publish New Certification - DirectPV Operator
Guía completa para publicar una nueva versión certificada del DirectPV Operator en Red Hat.
📋 Resumen del Proceso
El proceso completo consta de 12 fases divididas en dos partes:
Parte 1: Fases 1-8 (Automáticas via script)
✅ Ejecutadas por run-all-phases.sh
→ update-operator.sh
Parte 2: Fases 9-12 (Manuales)
⚠️ Requieren ejecución manual con comandos específicos
🚀 Ejecución Completa
PASO 1: Ejecutar Script Automático
# Ir al directorio de certificación
cd /Users/cniackz/minio/directpv/certification
# Ejecutar script que hace fases 1-8
./run-all-phases.sh
Qué hace este script:
Fase 1: Backup
# Crea backup timestamped
/Users/cniackz/Private-DPV-Operator-BACKUP-YYYYMMDD-HHMMSS
Fase 2: Update DirectPV Repo
cd /Users/cniackz/directpv
git fetch origin
git checkout master
git pull origin master
Fase 3: Update Helm Charts
# Copia charts 0.3.1 desde directpv repo
cd /Users/cniackz/Private-DPV-Operator
rm -rf helm-charts/aistor-volumemanager/*
cp -R /Users/cniackz/directpv/helm/aistor-volumemanager/* helm-charts/aistor-volumemanager/
Fase 4: Fix Memory Limits
Corrige memory limits en AMBOS archivos:
config/manager/manager.yaml
→ Manager: 1Gi/256Miconfig/default/manager_auth_proxy_patch.yaml
→ Proxy: 512Mi/128Mi
Fase 5: Update Makefile Version
# Actualiza VERSION en Makefile
VERSION ?= 5.0.1
Fase 6: Regenerate Bundle
make bundle
Input requerido:
Display name: directpv
Description: DirectPV CSI Driver for Kubernetes
Provider: MinIO
URL: https://min.io
Keywords: storage,csi,directpv
Maintainers: celis:[email protected]
Fase 7: Verify Bundle
Verifica que bundle/manifests/private-dpv-operator.clusterserviceversion.yaml
tenga memory correcta.
Fase 8: Fix Bundle (si es necesario)
Auto-corrige CSV si memory está mal.
Resultado de Fases 1-8:
✅ Backup creado
✅ Charts actualizadas a 0.3.1
✅ Memory limits corregidos (1Gi/256Mi)
✅ Bundle regenerado
✅ CSV verificado
🛠️ PASO 2: Fases Manuales (9-12)
Fase 9: Compilar Operator Image
Directorio: /Users/cniackz/Private-DPV-Operator
# 1. Ir al directorio del operator
cd /Users/cniackz/Private-DPV-Operator
# 2. Verificar que estás en el directorio correcto
pwd
# Output esperado: /Users/cniackz/Private-DPV-Operator
# 3. Verificar la versión en Makefile
grep "^VERSION" Makefile
# Output esperado: VERSION ?= 5.0.1
# 4. Login a quay.io (si no estás logueado)
docker login quay.io
# Username: cniackz4
# Password: [tu password]
# 5. Build de la imagen (arquitectura x86)
make docker-build
# Este comando ejecuta:
# docker buildx build --platform linux/amd64 -t quay.io/cniackz4/directpv-operator:5.0.1 .
# 6. Push de la imagen a quay.io
make docker-push
# Este comando ejecuta:
# docker push quay.io/cniackz4/directpv-operator:5.0.1
# 7. Verificar que la imagen fue pusheada
docker images | grep directpv-operator
Duración: 30-40 minutos (dependiendo de tu conexión)
Output esperado:
[+] Building 1234.5s (12/12) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 1.23kB
...
=> exporting to image
=> => pushing layers
=> => pushing manifest for quay.io/cniackz4/directpv-operator:5.0.1
Successfully built and pushed quay.io/cniackz4/directpv-operator:5.0.1
Fase 10: Compilar Bundle Image
Directorio: /Users/cniackz/Private-DPV-Operator
# 1. Asegúrate de estar en el directorio correcto
cd /Users/cniackz/Private-DPV-Operator
# 2. Verificar que bundle existe
ls -la bundle/
# Debe mostrar: manifests/ y metadata/
# 3. Build del bundle image
make bundle-build
# Este comando ejecuta:
# docker build -f bundle.Dockerfile -t quay.io/cniackz4/directpv-operator-bundle:v5.0.1 .
# 4. Push del bundle image
make bundle-push
# Este comando ejecuta:
# docker push quay.io/cniackz4/directpv-operator-bundle:v5.0.1
# 5. Verificar que el bundle fue pusheado
docker images | grep directpv-operator-bundle
Duración: 5-10 minutos
Output esperado:
Successfully built abc123def456
Successfully tagged quay.io/cniackz4/directpv-operator-bundle:v5.0.1
The push refers to repository [quay.io/cniackz4/directpv-operator-bundle]
...
v5.0.1: digest: sha256:abc123... size: 1234
Fase 11: Actualizar CSV con Digests
Directorio: /Users/cniackz/Private-DPV-Operator
# 1. Ir al directorio del operator
cd /Users/cniackz/Private-DPV-Operator
# 2. Obtener digest de operator image
OPERATOR_IMAGE="quay.io/cniackz4/directpv-operator:5.0.1"
OPERATOR_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' $OPERATOR_IMAGE | cut -d'@' -f2)
echo "Operator digest: $OPERATOR_DIGEST"
# Output: sha256:abc123def456...
# 3. Obtener digest de bundle image
BUNDLE_IMAGE="quay.io/cniackz4/directpv-operator-bundle:v5.0.1"
BUNDLE_DIGEST=$(docker inspect --format='{{index .RepoDigests 0}}' $BUNDLE_IMAGE | cut -d'@' -f2)
echo "Bundle digest: $BUNDLE_DIGEST"
# Output: sha256:def456abc123...
# 4. Actualizar CSV con digest del operator
CSV_FILE="bundle/manifests/private-dpv-operator.clusterserviceversion.yaml"
# Backup del CSV original
cp "$CSV_FILE" "$CSV_FILE.backup"
# Reemplazar image con digest
sed -i '' "s|image: quay.io/cniackz4/directpv-operator:.*|image: quay.io/cniackz4/directpv-operator@$OPERATOR_DIGEST|g" "$CSV_FILE"
# 5. Verificar que el CSV fue actualizado
echo ""
echo "Verificando CSV actualizado:"
grep "image: quay.io/cniackz4/directpv-operator@" "$CSV_FILE"
# Output esperado:
# image: quay.io/cniackz4/directpv-operator@sha256:abc123def456...
# 6. Rebuild bundle con digest actualizado
make bundle-build
# 7. Push del bundle actualizado
make bundle-push
Importante:
- ✅ Las imágenes ahora usan digests (
@sha256:...
) en lugar de tags (:5.0.1
) - ✅ Red Hat requiere digests para certificación
- ✅ El CSV ahora tiene la referencia inmutable a la imagen
Fase 12: Crear PR en Certified Operators
Directorio: /Users/cniackz/certified-operators
# 1. Ir al directorio de certified-operators
cd /Users/cniackz/certified-operators
# 2. Verificar que estás en el directorio correcto
pwd
# Output esperado: /Users/cniackz/certified-operators
# 3. Verificar que tienes el upstream configurado
git remote -v
# Output esperado:
# origin [email protected]:cniackz/certified-operators.git (fetch)
# upstream [email protected]:redhat-openshift-ecosystem/certified-operators.git (fetch)
# 4. Actualizar fork desde upstream
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
# 5. Crear variables para el PR
export OPERATOR_NAME="minio-volume-manager-operator"
export REDHAT_VERSION=$(date +"%Y.%-m.%d%H%M%S")
export BRANCH_NAME="$OPERATOR_NAME-$REDHAT_VERSION"
export REDHAT_PROJECT_ID="6866ea1357a2e3760f91f145"
echo "Red Hat version: $REDHAT_VERSION"
echo "Branch name: $BRANCH_NAME"
# 6. Crear branch
git checkout -b "$BRANCH_NAME"
# 7. Crear directorios para el nuevo bundle
mkdir -p "operators/$OPERATOR_NAME/$REDHAT_VERSION"
# 8. Copiar bundle desde Private-DPV-Operator
cp -R /Users/cniackz/Private-DPV-Operator/bundle/manifests "operators/$OPERATOR_NAME/$REDHAT_VERSION/"
cp -R /Users/cniackz/Private-DPV-Operator/bundle/metadata "operators/$OPERATOR_NAME/$REDHAT_VERSION/"
# 9. Crear ci.yaml con project ID
echo "cert_project_id: $REDHAT_PROJECT_ID" > "operators/$OPERATOR_NAME/ci.yaml"
# 10. Verificar estructura creada
tree "operators/$OPERATOR_NAME/$REDHAT_VERSION/" -L 2
# Output esperado:
# operators/minio-volume-manager-operator/2025.10.1234567/
# ├── manifests/
# │ ├── private-dpv-operator.clusterserviceversion.yaml
# │ └── ...
# └── metadata/
# └── annotations.yaml
# 11. Git add
git add "operators/$OPERATOR_NAME/"
# 12. Ver cambios
git status --short
# 13. Crear commit
git commit -m "operator $OPERATOR_NAME ($REDHAT_VERSION)
Update to v5.0.1 with Helm charts 0.3.1
Changes:
- Update Helm charts to 0.3.1 (seccomp, hostNetwork support)
- Fix OOMKilled issue (memory: 1Gi/256Mi)
- Build for x86 (linux/amd64) architecture
- Use image digests
- Add Red Hat certification metadata
Version: $REDHAT_VERSION
Operator: $OPERATOR_NAME
Certification Project ID: $REDHAT_PROJECT_ID
Repository: https://github.com/cniackz/Private-DPV-Operator"
# 14. Push branch
git push --set-upstream origin "$BRANCH_NAME"
# 15. Crear PR usando gh CLI
gh pr create \
--repo redhat-openshift-ecosystem/certified-operators \
--base main \
--head cniackz:$BRANCH_NAME \
--title "operator $OPERATOR_NAME ($REDHAT_VERSION)" \
--body "## Update to v5.0.1 with Helm charts 0.3.1
### Changes
- Update Helm charts to 0.3.1 (seccomp, hostNetwork support)
- Fix OOMKilled issue (memory: 1Gi/256Mi)
- Build for x86 (linux/amd64) architecture
- Use image digests
- Add Red Hat certification metadata
### Version Information
- **Operator Version:** 5.0.1
- **Chart Version:** 0.3.1
- **Red Hat Version:** $REDHAT_VERSION
- **Operator Name:** $OPERATOR_NAME
- **Certification Project ID:** $REDHAT_PROJECT_ID
### Repository
https://github.com/cniackz/Private-DPV-Operator
### Testing
- ✅ Tested locally with operator-sdk run bundle
- ✅ Memory limits verified: 1Gi/256Mi
- ✅ Image digests used
- ✅ Built for linux/amd64
/cc @redhat-openshift-ecosystem/certified-operators-reviewers"
Output esperado:
Creating pull request for cniackz:minio-volume-manager-operator-2025.10.1234567 into main in redhat-openshift-ecosystem/certified-operators
https://github.com/redhat-openshift-ecosystem/certified-operators/pull/XXXX
✅ Verificación Final
Checklist antes de crear PR:
# 1. Verificar que operator image tiene digest
cd /Users/cniackz/Private-DPV-Operator
grep "image: quay.io/cniackz4/directpv-operator@sha256:" bundle/manifests/private-dpv-operator.clusterserviceversion.yaml
# 2. Verificar memory limits en CSV
grep -A 4 "memory:" bundle/manifests/private-dpv-operator.clusterserviceversion.yaml | grep "1Gi"
# 3. Verificar que las imágenes están en quay.io
open "https://quay.io/repository/cniackz4/directpv-operator?tab=tags"
open "https://quay.io/repository/cniackz4/directpv-operator-bundle?tab=tags"
# 4. Verificar que el bundle es válido
operator-sdk bundle validate ./bundle
# Output esperado:
# INFO[0000] All validation tests have completed successfully
📊 Resultado Final
Después de completar todas las fases:
En Private-DPV-Operator:
- ✅ Helm charts actualizados a 0.3.1
- ✅ Memory limits corregidos (1Gi/256Mi)
- ✅ Bundle regenerado con versión 5.0.1
- ✅ CSV actualizado con image digests
- ✅ Imágenes compiladas y pusheadas a quay.io
En certified-operators:
- ✅ Branch creado:
minio-volume-manager-operator-YYYY.M.DDHHMM SS
- ✅ Bundle copiado a:
operators/minio-volume-manager-operator/YYYY.M.DDHHMMSS/
- ✅ ci.yaml creado con project ID
- ✅ PR creado contra redhat-openshift-ecosystem/certified-operators
En Red Hat:
- ⏳ Tests automáticos comenzarán en minutos:
- File structure validation
- Metadata validation
- Image digest validation
- DeployableByOLM test (30+ min)
- CSI tests (requiere aprobación manual)
🐛 Troubleshooting Común
Error: "docker push denied"
# Solución: Login a quay.io
docker login quay.io
Error: "operator-sdk: command not found"
# Solución: El script descarga operator-sdk automáticamente
cd /Users/cniackz/Private-DPV-Operator
make bundle # Esto descargará operator-sdk si no existe
Error: "gh: command not found"
# Solución: Instalar GitHub CLI
brew install gh
gh auth login
Error: "Memory limits still wrong in CSV"
# Solución: Ejecutar fix manual
cd /Users/cniackz/Private-DPV-Operator
./update-operator.sh --fix-only
Error: "Image not found in quay.io"
# Solución: Verificar que la imagen fue pusheada
docker images | grep directpv-operator
docker push quay.io/cniackz4/directpv-operator:5.0.1
📚 Referencias
- Documentación completa:
/Users/cniackz/minio/directpv/certification/INDEX.md
- Script de certificación:
/Users/cniackz/minio/directpv/certification/run-all-phases.sh
- Guía de troubleshooting:
/Users/cniackz/minio/directpv/certification/TROUBLESHOOTING.md
- Red Hat Project: https://connect.redhat.com/projects/6866ea1357a2e3760f91f145
- Certified Operators: https://github.com/redhat-openshift-ecosystem/certified-operators
📝 Notas Importantes
- Arquitectura: SIEMPRE compilar para
linux/amd64
(x86), NO arm64 - Digests: SIEMPRE usar digests (@sha256:...) en lugar de tags
- Memory limits: Manager: 1Gi/256Mi, Proxy: 512Mi/128Mi
- Testing local: Probar con
operator-sdk run bundle
antes de crear PR - Paciencia: Los tests de Red Hat pueden tomar 1-2 horas
Última actualización: 2 de Octubre, 2025 Versión del documento: 2.0 Autor: Cesar Celis Hernandez