generated from giantswarm/template-app
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgenerate-patches.sh
executable file
·89 lines (69 loc) · 2.68 KB
/
generate-patches.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
ROOT_DIR="./$(dirname "$0")/.."
ROOT_DIR="$(realpath "$ROOT_DIR")"
KUSTOMIZE_CRD_DIR="$ROOT_DIR/helm/cluster-api/files"
# YQ="./$(dirname "$0")/tools/bin/yq"
for CRD_DIR in "$KUSTOMIZE_CRD_DIR/core" "$KUSTOMIZE_CRD_DIR/bootstrap" "$KUSTOMIZE_CRD_DIR/controlplane"; do
CRD_BASE_DIR="${CRD_DIR}/bases"
CRD_VERSION_PATCHES_DIR="${CRD_DIR}/patches/versions"
# remove old patches
rm -rf "${CRD_VERSION_PATCHES_DIR:?}"/v*
KUSTOMIZATION_FILE="${CRD_DIR}/kustomization.yaml"
if [ ! -f "$KUSTOMIZATION_FILE" ]; then
cat > "$KUSTOMIZATION_FILE" << EOF
resources:
patches:
EOF
else
# clean up resource list
yq e -i '.resources = null' "$KUSTOMIZATION_FILE"
# clean up API version patches
for ((i=$(yq eval '.patches | length' "$KUSTOMIZATION_FILE")-1; i>=0; i--)); do
patch_path=$(j="$i" yq e '.patches[env(j)].path' "$KUSTOMIZATION_FILE")
if [[ "$patch_path" = patches/versions* ]]; then
j="$i" yq e -i 'del .patches[env(j)]' "$KUSTOMIZATION_FILE"
fi
done
patch_len=$(yq eval '.patches | length' "$KUSTOMIZATION_FILE")
if [ "$patch_len" -eq "0" ]; then
yq e -i '.patches = null' "$KUSTOMIZATION_FILE"
fi
fi
for crd in "${CRD_BASE_DIR}"/*.yaml
do
crd_name="$(yq e '.metadata.name' "$crd")"
echo "$crd_name"
crd_filename="$(basename "$crd")"
# Add CRD base to kustomization.yaml
yq eval -i '.resources += ["bases/'"$crd_filename"'"]' "$KUSTOMIZATION_FILE"
version_index=0
for version in $(yq e '.spec.versions[].name' "$crd")
do
version_patches_dir="$CRD_VERSION_PATCHES_DIR/$version"
mkdir -p "$version_patches_dir"
patch_file="$version_patches_dir/$crd_filename"
rm -f "$patch_file"
echo "- op: replace
path: /spec/versions/$version_index/schema
value:
" > "$patch_file"
version_obj="$(yq e ".spec.versions[$version_index].schema" "$crd")" \
yq e -i '.[0].value = env(version_obj)' "$patch_file"
# Add CRD version patches to kustomization.yaml
version_patch_entry="path: patches/versions/$version/$crd_filename
target:
group: apiextensions.k8s.io
version: v1
kind: CustomResourceDefinition
name: $crd_name
" \
yq eval -i '.patches += [env(version_patch_entry)]' "$KUSTOMIZATION_FILE"
# Delete version data from the CRD base
yq e -i ".spec.versions[$version_index].schema = {}" "$crd"
version_index=$((version_index+1))
done
done
done