From bd66f818a4ee3b7711f933178ae29de1493b687d Mon Sep 17 00:00:00 2001 From: Joseph Hanson Date: Wed, 29 May 2024 13:55:28 -0500 Subject: [PATCH] debug --- .forgejo/workflows/schemas.yaml | 57 +++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/.forgejo/workflows/schemas.yaml b/.forgejo/workflows/schemas.yaml index 2c264e99..52e791a8 100644 --- a/.forgejo/workflows/schemas.yaml +++ b/.forgejo/workflows/schemas.yaml @@ -56,7 +56,7 @@ jobs: fileName: config.json fileDir: $GITHUB_WORKSPACE - - name: Extracting CRDs to yaml + - name: Extracting CRDs to yaml and converting to JSON schema env: KUBECONFIG: "${{ steps.kubeconfig.outputs.filePath }}" run: | @@ -67,7 +67,15 @@ jobs: # Create final schemas directory SCHEMAS_DIR=$GITHUB_WORKSPACE/crdSchemas mkdir -p $SCHEMAS_DIR + echo "Schemas directory: $SCHEMAS_DIR" + # Create array to store CRD kinds and groups + ORGANIZE_BY_GROUP=true + declare -A CRD_GROUPS 2>/dev/null + if [ $? -ne 0 ]; then + # Array creation failed, signal to skip organization by group + ORGANIZE_BY_GROUP=false + fi # Extract CRDs from cluster NUM_OF_CRDS=0 while read -r crd @@ -85,16 +93,45 @@ jobs: let ++NUM_OF_CRDS done < <(kubectl get crds 2>&1 | sed -n '/NAME/,$p' | tail -n +2) echo numCRDs: $NUM_OF_CRDS + # Download converter script + curl https://raw.githubusercontent.com/yannh/kubeconform/master/scripts/openapi2jsonschema.py --output $TMP_CRD_DIR/openapi2jsonschema.py 2>/dev/null - - name: Download and run crd-extractor - env: - KUBECONFIG: "${{ steps.kubeconfig.outputs.filePath }}" - shell: bash - run: | - curl -fsSL -o $GITHUB_WORKSPACE/crd-extractor.sh \ - https://raw.githubusercontent.com/datreeio/CRDs-catalog/main/Utilities/crd-extractor.sh - chmod +x $GITHUB_WORKSPACE/crd-extractor.sh - bash $GITHUB_WORKSPACE/crd-extractor.sh + # Convert crds to jsonSchema + python3 $TMP_CRD_DIR/openapi2jsonschema.py $TMP_CRD_DIR/*.yaml + conversionResult=$? + + # Copy and rename files to support kubeval + rm -rf $SCHEMAS_DIR/master-standalone + mkdir -p $SCHEMAS_DIR/master-standalone + cp $SCHEMAS_DIR/*.json $SCHEMAS_DIR/master-standalone + find $SCHEMAS_DIR/master-standalone -name '*json' -exec bash -c ' mv -f $0 ${0/\_/-stable-}' {} \; + + # Organize schemas by group + if [ $ORGANIZE_BY_GROUP == true ]; then + for schema in $SCHEMAS_DIR/*.json + do + crdFileName=$(basename $schema .json) + crdKind=${crdFileName%%_*} + crdGroup=${CRD_GROUPS[$crdKind]} + mkdir -p $crdGroup + mv $schema ./$crdGroup + done + fi + + CYAN='\033[0;36m' + GREEN='\033[0;32m' + NC='\033[0m' # No Color + + if [ $conversionResult == 0 ]; then + printf "${GREEN}Successfully converted $NUM_OF_CRDS CRDs to JSON schema${NC}\n" + + printf "\nTo validate a CR using various tools, run the relevant command:\n" + printf "\n- ${CYAN}datree:${NC}\n\$ datree test /path/to/file\n" + printf "\n- ${CYAN}kubeconform:${NC}\n\$ kubeconform -summary -output json -schema-location default -schema-location '$SCHEMAS_DIR/{{ .ResourceKind }}_{{ .ResourceAPIVersion }}.json' /path/to/file\n" + printf "\n- ${CYAN}kubeval:${NC}\n\$ kubeval --additional-schema-locations file:\"$SCHEMAS_DIR\" /path/to/file\n\n" + fi + + rm -rf $TMP_CRD_DIR - name: Deploy to Cloudflare R2 env: