191 lines
4.4 KiB
Bash
Executable File
191 lines
4.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eo pipefail
|
|
shopt -s globstar
|
|
|
|
prepare() {
|
|
mkdir -p "${WORKDIR}"
|
|
curl -SsfL -o "${WORKDIR}/${NAME}.crds.yaml" "${SOURCE}"
|
|
}
|
|
|
|
output() {
|
|
TARGET_DIR="$DIST/$API"
|
|
mkdir -p "$TARGET_DIR"
|
|
|
|
for FILE in "${WORKDIR}"/*.json; do
|
|
FILENAME=$(basename "$FILE")
|
|
|
|
mv "$FILE" "$TARGET_DIR/$FILENAME"
|
|
done
|
|
}
|
|
|
|
generate_all() {
|
|
export SOURCE=$1
|
|
|
|
export TYPE=anyOf
|
|
gomplate -d source=env:SOURCE -d type=env:TYPE -o "$SOURCE/all-$TYPE.json" -f templates/all.json.tmpl
|
|
|
|
export TYPE=oneOf
|
|
gomplate -d source=env:SOURCE -d type=env:TYPE -o "$SOURCE/all-$TYPE.json" -f templates/all.json.tmpl
|
|
}
|
|
|
|
exec_openapi() {
|
|
printf "Processing %s ...\n" "$1"
|
|
prepare
|
|
(
|
|
cd "$WORKDIR"
|
|
openapi2jsonschema "${NAME}.crds.yaml" >/dev/null
|
|
)
|
|
output
|
|
generate_all "$TARGET_DIR"
|
|
}
|
|
|
|
calico_handler() {
|
|
API=projectcalico.org
|
|
NAME=calico
|
|
WORKDIR="${TMP_CRD_DIR}/calico"
|
|
SOURCE="https://raw.githubusercontent.com/projectcalico/calico/${CALICO_VERSION}/manifests/calico.yaml"
|
|
|
|
printf "Processing %s ...\n" $API
|
|
prepare
|
|
(
|
|
cd "$WORKDIR"
|
|
openapi2jsonschema "${NAME}.crds.yaml" >/dev/null
|
|
)
|
|
|
|
TARGET_DIR="$DIST/$API"
|
|
mkdir -p "$TARGET_DIR"
|
|
|
|
for FILE in "${WORKDIR}"/*.json; do
|
|
FILENAME=$(basename "$FILE")
|
|
|
|
mv "$FILE" "$TARGET_DIR/${FILENAME//_v1/_v3}"
|
|
done
|
|
|
|
generate_all "$TARGET_DIR"
|
|
}
|
|
|
|
flux_handler() {
|
|
API=toolkit.fluxcd.io
|
|
WORKDIR="${TMP_CRD_DIR}/flux"
|
|
SOURCE="https://github.com/fluxcd/flux2/releases/download/${FLUXCD_VERSION}/crd-schemas.tar.gz"
|
|
|
|
printf "Processing %s ...\n" $API
|
|
mkdir -p "${WORKDIR}"
|
|
curl -SsfL "${SOURCE}" | tar xz -C "${WORKDIR}"
|
|
|
|
for FILE in "${WORKDIR}"/*.json; do
|
|
FILENAME=$(basename "$FILE")
|
|
|
|
case "$FILENAME" in
|
|
all.json | _definitions.json)
|
|
continue
|
|
;;
|
|
esac
|
|
|
|
PREFIX="${FILENAME%%\-*}"
|
|
MIDDLE="${FILENAME#*-}"
|
|
SUFFIX="${MIDDLE#*-}"
|
|
MIDDLE="${MIDDLE%%\-*}"
|
|
|
|
TARGET_DIR="$DIST/$MIDDLE.$API"
|
|
TARGET_NAME="$TARGET_DIR/$PREFIX""_""$SUFFIX"
|
|
|
|
mkdir -p "$TARGET_DIR"
|
|
mv "$FILE" "$TARGET_NAME"
|
|
|
|
generate_all "$TARGET_DIR"
|
|
done
|
|
}
|
|
|
|
metallb_handler() {
|
|
API=metallb.io
|
|
NAME=metallb
|
|
WORKDIR="${TMP_CRD_DIR}/$NAME"
|
|
SOURCE="https://raw.githubusercontent.com/metallb/metallb/${METALLB_VERSION}/charts/metallb/charts/crds/templates/crds.yaml"
|
|
|
|
printf "Processing %s ...\n" $API
|
|
prepare
|
|
(
|
|
cd "$WORKDIR"
|
|
yq --inplace 'del(.spec.conversion)' "${NAME}.crds.yaml"
|
|
openapi2jsonschema "${NAME}.crds.yaml" >/dev/null
|
|
)
|
|
output
|
|
generate_all "$TARGET_DIR"
|
|
}
|
|
|
|
objectbucket_handler() {
|
|
API=objectbucket.io
|
|
NAME=objectbucket
|
|
WORKDIR="${TMP_CRD_DIR}/$NAME"
|
|
SOURCE="https://github.com/kube-object-storage/lib-bucket-provisioner/archive/refs/tags/kubernetes-v1.14.1.tar.gz"
|
|
|
|
printf "Processing %s ...\n" $API
|
|
mkdir -p "${WORKDIR}"
|
|
curl -SsfL "${SOURCE}" | tar xz -C "${WORKDIR}" --strip-components=1
|
|
(
|
|
cd "$WORKDIR"
|
|
for FILE in "${WORKDIR}"/deploy/crds/*crd.yaml; do
|
|
openapi2jsonschema "${FILE}" >/dev/null
|
|
done
|
|
)
|
|
|
|
output
|
|
generate_all "$TARGET_DIR"
|
|
}
|
|
|
|
cnpg_handler() {
|
|
API=postgresql.cnpg.io
|
|
NAME=cnpg
|
|
WORKDIR="${TMP_CRD_DIR}/$NAME"
|
|
SOURCE="https://github.com/cloudnative-pg/cloudnative-pg/releases/download/${CNPG_VERSION}/cnpg-${CNPG_VERSION##v}.yaml"
|
|
|
|
exec_openapi $API
|
|
}
|
|
|
|
certmanager_handler() {
|
|
API=cert-manager.io
|
|
NAME=cert-manager
|
|
WORKDIR="${TMP_CRD_DIR}/$NAME"
|
|
SOURCE="https://github.com/cert-manager/cert-manager/releases/download/${CERTMANAGER_VERSION}/cert-manager.crds.yaml"
|
|
|
|
exec_openapi $API
|
|
}
|
|
|
|
minio_handler() {
|
|
API=minio.min.io
|
|
NAME=minio
|
|
WORKDIR="${TMP_CRD_DIR}/$NAME"
|
|
SOURCE="https://raw.githubusercontent.com/minio/operator/${MINIO_VERSION}/resources/base/crds/minio.min.io_tenants.yaml"
|
|
|
|
exec_openapi $API
|
|
}
|
|
|
|
k8up_handler() {
|
|
API=k8up.io
|
|
NAME=k8up
|
|
WORKDIR="${TMP_CRD_DIR}/$NAME"
|
|
SOURCE="https://github.com/k8up-io/k8up/releases/download/k8up-${K8UP_VERSION}/k8up-crd.yaml"
|
|
|
|
exec_openapi $API
|
|
}
|
|
|
|
handlers=(
|
|
calico_handler
|
|
flux_handler
|
|
metallb_handler
|
|
objectbucket_handler
|
|
cnpg_handler
|
|
certmanager_handler
|
|
minio_handler
|
|
k8up_handler
|
|
)
|
|
|
|
if [ $# -eq 0 ]; then
|
|
for handler in "${handlers[@]}"; do
|
|
"$handler"
|
|
done
|
|
else
|
|
"$1"_handler
|
|
fi
|