parent
516a81df5e
commit
bd66f818a4
1 changed files with 47 additions and 10 deletions
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue