@@ -44,88 +44,98 @@ REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
4444# Source bingo so we can use kustomize and yq
4545. " ${REPO_ROOT} /openshift/.bingo/variables.env"
4646
47- # We're going to do file manipulation, so let's work in a temp dir
48- TMP_ROOT=" $( mktemp -p . -d 2> /dev/null || mktemp -d ./tmpdir.XXXXXXX) "
49- # Make sure to delete the temp dir when we exit
50- trap ' rm -rf $TMP_ROOT' EXIT
51-
52- # Copy all kustomize files into a temp dir
53- cp -a " ${REPO_ROOT} /config/" " ${TMP_ROOT} /config/"
54-
55- mkdir -p " ${TMP_ROOT} /openshift/catalogd/"
56- cp -a " ${REPO_ROOT} /openshift/catalogd/kustomize" " ${TMP_ROOT} /openshift/catalogd/kustomize"
57-
58- # Override OPENSHIFT-NAMESPACE to ${NAMESPACE}
59- find " ${TMP_ROOT} " -name " *.yaml" -exec sed -i' .bak' " s/OPENSHIFT-NAMESPACE/${NAMESPACE} /g" {} \;
60- find " ${TMP_ROOT} " -name " *.bak" -exec rm {} \;
61-
62- # Create a temp dir for manifests
63- TMP_MANIFEST_DIR=" ${TMP_ROOT} /manifests"
64- mkdir -p " $TMP_MANIFEST_DIR "
65-
66- # Run kustomize, which emits a single yaml file
67- TMP_KUSTOMIZE_OUTPUT=" ${TMP_MANIFEST_DIR} /temp.yaml"
68- $KUSTOMIZE build " ${TMP_ROOT} /openshift/catalogd/kustomize/overlays/openshift" -o " $TMP_KUSTOMIZE_OUTPUT "
69-
70- for container_name in " ${! IMAGE_MAPPINGS[@]} " ; do
71- placeholder=" ${IMAGE_MAPPINGS[$container_name]} "
72- $YQ -i " (select(.kind == \" Deployment\" )|.spec.template.spec.containers[]|select(.name==\" $container_name \" )|.image) = \" $placeholder \" " " $TMP_KUSTOMIZE_OUTPUT "
73- $YQ -i ' select(.kind == "Deployment").spec.template.metadata.annotations += {"target.workload.openshift.io/management": "{\"effect\": \"PreferredDuringScheduling\"}"}' " $TMP_KUSTOMIZE_OUTPUT "
74- $YQ -i ' select(.kind == "Deployment").spec.template.metadata.annotations += {"openshift.io/required-scc": "privileged"}' " $TMP_KUSTOMIZE_OUTPUT "
75- $YQ -i ' select(.kind == "Deployment").spec.template.spec += {"priorityClassName": "system-cluster-critical"}' " $TMP_KUSTOMIZE_OUTPUT "
76- done
77-
78- # Loop through any flag updates that need to be made to the manager container
79- for flag_name in " ${! FLAG_MAPPINGS[@]} " ; do
80- flagval=" ${FLAG_MAPPINGS[$flag_name]} "
81-
82- # First, update the flag if it exists
83- $YQ -i " (select(.kind == \" Deployment\" ) | .spec.template.spec.containers[] | select(.name == \" manager\" ) | .args[] | select(. | contains(\" --$flag_name =\" )) | .) = \" --$flag_name =$flagval \" " " $TMP_KUSTOMIZE_OUTPUT "
84-
85- # Then, append the flag if it doesn't exist
86- $YQ -i " (select(.kind == \" Deployment\" ) | .spec.template.spec.containers[] | select(.name == \" manager\" ) | .args) |= (select(.[] | contains(\" --$flag_name =\" )) | .) // . + [\" --$flag_name =$flagval \" ]" " $TMP_KUSTOMIZE_OUTPUT "
87- done
88-
89- # Use yq to split the single yaml file into 1 per document.
90- # Naming convention: $index-$kind-$namespace-$name. If $namespace is empty, just use the empty string.
91- (
92- cd " $TMP_MANIFEST_DIR "
93-
94- # shellcheck disable=SC2016
95- ${YQ} -s ' $index +"-"+ (.kind|downcase) +"-"+ (.metadata.namespace // "") +"-"+ .metadata.name' temp.yaml
96- )
97-
98- # Delete the single yaml file
99- rm " $TMP_KUSTOMIZE_OUTPUT "
100-
101- # Delete and recreate the actual manifests directory
102- MANIFEST_DIR=" ${REPO_ROOT} /openshift/catalogd/manifests"
103- rm -rf " ${MANIFEST_DIR} "
104- mkdir -p " ${MANIFEST_DIR} "
105-
106- # Copy everything we just generated and split into the actual manifests directory
107- cp " $TMP_MANIFEST_DIR " /* " $MANIFEST_DIR " /
108-
109- # Update file names to be in the format nn-$kind-$namespace-$name
110- (
111- cd " $MANIFEST_DIR "
112-
113- for f in * ; do
114- # Get the numeric prefix from the filename
115- index=$( echo " $f " | cut -d ' -' -f 1)
116- # Keep track of the full file name without the leading number and dash
117- name_without_index=${f# $index -}
118- # Fix the double dash in cluster-scoped names
119- name_without_index=${name_without_index// --/ -}
120- # Reformat the name so the leading number is always padded to 2 digits
121- new_name=$( printf " %02d" " $index " ) -$name_without_index
122- # Some file names (namely CRDs) don't end in .yml - make them
123- if ! [[ " $new_name " =~ yml$ ]]; then
124- new_name=" ${new_name} " .yml
125- fi
126- if [[ " $f " != " $new_name " ]]; then
127- # Rename
128- mv " $f " " ${new_name} "
129- fi
130- done
131- )
47+ # This function generates the manifests
48+ generate () {
49+ INPUT_DIR=${1}
50+ OUTPUT_DIR=${2}
51+ # We're going to do file manipulation, so let's work in a temp dir
52+ TMP_ROOT=" $( mktemp -p . -d 2> /dev/null || mktemp -d ./tmpdir.XXXXXXX) "
53+ # Make sure to delete the temp dir when we exit
54+ trap ' rm -rf $TMP_ROOT' EXIT
55+
56+ # Copy all kustomize files into a temp dir
57+ cp -a " ${REPO_ROOT} /config/" " ${TMP_ROOT} /config/"
58+
59+ mkdir -p " ${TMP_ROOT} /openshift/catalogd/"
60+ cp -a " ${REPO_ROOT} /openshift/catalogd/kustomize" " ${TMP_ROOT} /openshift/catalogd/kustomize"
61+
62+ # Override OPENSHIFT-NAMESPACE to ${NAMESPACE}
63+ find " ${TMP_ROOT} " -name " *.yaml" -exec sed -i' .bak' " s/OPENSHIFT-NAMESPACE/${NAMESPACE} /g" {} \;
64+ find " ${TMP_ROOT} " -name " *.bak" -exec rm {} \;
65+
66+ # Create a temp dir for manifests
67+ TMP_MANIFEST_DIR=" ${TMP_ROOT} /manifests"
68+ mkdir -p " $TMP_MANIFEST_DIR "
69+
70+ # Run kustomize, which emits a single yaml file
71+ TMP_KUSTOMIZE_OUTPUT=" ${TMP_MANIFEST_DIR} /temp.yaml"
72+ $KUSTOMIZE build " ${TMP_ROOT} /openshift/catalogd/kustomize/overlays/${INPUT_DIR} " -o " $TMP_KUSTOMIZE_OUTPUT "
73+
74+ for container_name in " ${! IMAGE_MAPPINGS[@]} " ; do
75+ placeholder=" ${IMAGE_MAPPINGS[$container_name]} "
76+ $YQ -i " (select(.kind == \" Deployment\" )|.spec.template.spec.containers[]|select(.name==\" $container_name \" )|.image) = \" $placeholder \" " " $TMP_KUSTOMIZE_OUTPUT "
77+ $YQ -i ' select(.kind == "Deployment").spec.template.metadata.annotations += {"target.workload.openshift.io/management": "{\"effect\": \"PreferredDuringScheduling\"}"}' " $TMP_KUSTOMIZE_OUTPUT "
78+ $YQ -i ' select(.kind == "Deployment").spec.template.metadata.annotations += {"openshift.io/required-scc": "privileged"}' " $TMP_KUSTOMIZE_OUTPUT "
79+ $YQ -i ' select(.kind == "Deployment").spec.template.spec += {"priorityClassName": "system-cluster-critical"}' " $TMP_KUSTOMIZE_OUTPUT "
80+ done
81+
82+ # Loop through any flag updates that need to be made to the manager container
83+ for flag_name in " ${! FLAG_MAPPINGS[@]} " ; do
84+ flagval=" ${FLAG_MAPPINGS[$flag_name]} "
85+
86+ # First, update the flag if it exists
87+ $YQ -i " (select(.kind == \" Deployment\" ) | .spec.template.spec.containers[] | select(.name == \" manager\" ) | .args[] | select(. | contains(\" --$flag_name =\" )) | .) = \" --$flag_name =$flagval \" " " $TMP_KUSTOMIZE_OUTPUT "
88+
89+ # Then, append the flag if it doesn't exist
90+ $YQ -i " (select(.kind == \" Deployment\" ) | .spec.template.spec.containers[] | select(.name == \" manager\" ) | .args) |= (select(.[] | contains(\" --$flag_name =\" )) | .) // . + [\" --$flag_name =$flagval \" ]" " $TMP_KUSTOMIZE_OUTPUT "
91+ done
92+
93+ # Use yq to split the single yaml file into 1 per document.
94+ # Naming convention: $index-$kind-$namespace-$name. If $namespace is empty, just use the empty string.
95+ (
96+ cd " $TMP_MANIFEST_DIR "
97+
98+ # shellcheck disable=SC2016
99+ ${YQ} -s ' $index +"-"+ (.kind|downcase) +"-"+ (.metadata.namespace // "") +"-"+ .metadata.name' temp.yaml
100+ )
101+
102+ # Delete the single yaml file
103+ rm " $TMP_KUSTOMIZE_OUTPUT "
104+
105+ # Delete and recreate the actual manifests directory
106+ MANIFEST_DIR=" ${REPO_ROOT} /openshift/catalogd/${OUTPUT_DIR} "
107+ rm -rf " ${MANIFEST_DIR} "
108+ mkdir -p " ${MANIFEST_DIR} "
109+
110+ # Copy everything we just generated and split into the actual manifests directory
111+ cp " $TMP_MANIFEST_DIR " /* " $MANIFEST_DIR " /
112+
113+ # Update file names to be in the format nn-$kind-$namespace-$name
114+ (
115+ cd " $MANIFEST_DIR "
116+
117+ for f in * ; do
118+ # Get the numeric prefix from the filename
119+ index=$( echo " $f " | cut -d ' -' -f 1)
120+ # Keep track of the full file name without the leading number and dash
121+ name_without_index=${f# $index -}
122+ # Fix the double dash in cluster-scoped names
123+ name_without_index=${name_without_index// --/ -}
124+ # Reformat the name so the leading number is always padded to 2 digits
125+ new_name=$( printf " %02d" " $index " ) -$name_without_index
126+ # Some file names (namely CRDs) don't end in .yml - make them
127+ if ! [[ " $new_name " =~ yml$ ]]; then
128+ new_name=" ${new_name} " .yml
129+ fi
130+ if [[ " $f " != " $new_name " ]]; then
131+ # Rename
132+ mv " $f " " ${new_name} "
133+ fi
134+ done
135+ )
136+ rm -rf " $TMP_ROOT "
137+ }
138+
139+ # Generate the manifests
140+ generate openshift manifests
141+ generate openshift-experimental manifests-experimental
0 commit comments