Skip to content
This repository was archived by the owner on Jun 12, 2023. It is now read-only.

Commit c07ec3e

Browse files
authored
Merge pull request #66 from davidvossel/csv-generator
Add csv-generator logic to ssp operator container image
2 parents e7d749a + c8333dd commit c07ec3e

7 files changed

+423
-20
lines changed

Makefile

+5-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ IMAGE_TAG ?= latest
66
OPERATOR_IMAGE ?= kubevirt-ssp-operator-container
77
REGISTRY_IMAGE ?= kubevirt-ssp-operator-registry
88

9-
container-build: container-build-operator container-build-registry
9+
container-build: csv-generator container-build-operator container-build-registry
1010

1111
container-build-operator:
1212
docker build -f build/Dockerfile -t $(IMAGE_REGISTRY)/$(OPERATOR_IMAGE):$(IMAGE_TAG) .
@@ -25,6 +25,9 @@ container-push-registry:
2525
container-release:
2626
./hack/docker-push.sh $(IMAGE_REGISTRY)/$(OPERATOR_IMAGE):$(IMAGE_TAG) $(IMAGE_REGISTRY)/$(REGISTRY_IMAGE):$(IMAGE_TAG)
2727

28+
csv-generator: operator-sdk
29+
./build/make-csv-generator.sh
30+
2831
operator-sdk:
2932
curl -JL https://github.com/operator-framework/operator-sdk/releases/download/$(OPERATOR_SDK_VERSION)/operator-sdk-$(OPERATOR_SDK_VERSION)-x86_64-linux-gnu -o operator-sdk
3033
chmod 0755 operator-sdk
@@ -35,7 +38,7 @@ manifests-prepare:
3538
manifests-cleanup:
3639
rm -rf _out
3740

38-
manifests: manifests-cleanup manifests-prepare operator-sdk
41+
manifests: csv-generator manifests-cleanup manifests-prepare operator-sdk
3942
./build/make-manifests.sh ${IMAGE_TAG}
4043
./hack/release-manifests.sh ${IMAGE_TAG}
4144

build/Dockerfile

+6
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
FROM quay.io/operator-framework/ansible-operator:v0.7.0
22

3+
LABEL org.kubevirt.hco.csv-generator.v1="/usr/bin/csv-generator"
4+
35
COPY roles/ ${HOME}/roles/
46
COPY playbooks/ ${HOME}/
57
COPY watches.yaml ${HOME}/watches.yaml
68
COPY _defaults.yml ${HOME}/_defaults.yml
79

10+
COPY deploy/crds ${HOME}/deploy/crds
11+
COPY manifests/generated ${HOME}/manifests/generated
12+
COPY build/csv-generator.sh /usr/bin/csv-generator
13+
814
COPY build/preprocess_template.py ${HOME}/
915
COPY patch.yaml ${HOME}/
1016
RUN python ${HOME}/preprocess_template.py ${HOME}/patch.yaml ${HOME}/roles/KubevirtCommonTemplatesBundle/files/

build/Dockerfile.registry

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ FROM quay.io/openshift/origin-operator-registry
33
COPY manifests /registry
44

55
# Initialize the database
6-
RUN initializer --manifests /registry --output bundles.db
6+
RUN rm -rf /registry/generated && \
7+
initializer --manifests /registry --output bundles.db
78

89
# There are multiple binaries in the origin-operator-registry
910
# We want the registry-server

build/csv-generator.sh

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
MANIFESTS_GENERATED_DIR="manifests/generated"
6+
CRDS_DIR="deploy/crds"
7+
if ! [ -d $MANIFESTS_GENERATED_DIR ]; then
8+
MANIFESTS_GENERATED_DIR="${HOME}/manifests/generated"
9+
CRDS_DIR="${HOME}/deploy/crds"
10+
fi
11+
MANIFESTS_GENERATED_CSV=${MANIFESTS_GENERATED_DIR}/kubevirt-ssp-operator.vVERSION.clusterserviceversion.yaml
12+
TMP_FILE=$(mktemp)
13+
14+
replace_env_var() {
15+
local value_offset=" "
16+
local key=$1
17+
local var=$2
18+
sed -i "s/- name: ${key}/- name: $1\n${value_offset}value: \"${var}\"/g" ${TMP_FILE}
19+
}
20+
21+
help_text() {
22+
echo "USAGE: csv-generator --csv-version=<version> --namespace=<namespace> --operator-image=<operator image> [optional args]"
23+
echo ""
24+
echo "ARGS:"
25+
echo " --csv-version: (REQUIRED) The version of the CSV file"
26+
echo " --namespace: (REQUIRED) The namespace set on the CSV file"
27+
echo " --operator-image: (REQUIRED) The operator container image to use in the CSV file"
28+
echo " --watch-namespace: (OPTIONAL)"
29+
echo " --kvm-info-tag: (OPTIONAL)"
30+
echo " --validator-tag: (OPTIONAL)"
31+
echo " --virt-launcher-tag: (OPTIONAL)"
32+
echo " --node-labeller-tag: (OPTIONAL)"
33+
echo " --cpu-plugin-tag: (OPTIONAL)"
34+
echo " --dump-crds: (OPTIONAL) Dumps CRD manifests with the CSV to stdout"
35+
}
36+
37+
# REQUIRED ARGS
38+
CSV_VERSION=""
39+
NAMESPACE=""
40+
OPERATOR_IMAGE=""
41+
42+
# OPTIONAL ARGS
43+
WATCH_NAMESPACE=""
44+
KVM_INFO_TAG=""
45+
VALIDATOR_TAG=""
46+
VIRT_LAUNCHER_TAG=""
47+
NODE_LABELLER_TAG=""
48+
CPU_PLUGIN_TAG=""
49+
DUMP_CRDS=""
50+
51+
while (( "$#" )); do
52+
ARG=`echo $1 | awk -F= '{print $1}'`
53+
VAL=`echo $1 | awk -F= '{print $2}'`
54+
shift
55+
56+
case "$ARG" in
57+
--csv-version)
58+
CSV_VERSION=$VAL
59+
;;
60+
--namespace)
61+
NAMESPACE=$VAL
62+
;;
63+
--operator-image)
64+
OPERATOR_IMAGE=$VAL
65+
;;
66+
--watch-namespace)
67+
WATCH_NAMESPACE=$VAL
68+
;;
69+
--kvm-info-tag)
70+
KVM_INFO_TAG=$VAL
71+
;;
72+
--validator-tag)
73+
VALIDATOR_TAG=$VAL
74+
;;
75+
--virt-launcher-tag)
76+
VIRT_LAUNCHER_TAG=$VAL
77+
;;
78+
--node-labeller-tag)
79+
NODE_LABELLER_TAG=$VAL
80+
;;
81+
--cpu-plugin-tag)
82+
CPU_PLUGIN_TAG=$VAL
83+
;;
84+
--dump-crds)
85+
DUMP_CRDS="true"
86+
;;
87+
--)
88+
break
89+
;;
90+
*) # unsupported flag
91+
echo "Error: Unsupported flag $ARG" >&2
92+
exit 1
93+
;;
94+
esac
95+
done
96+
97+
if [ -z "$CSV_VERSION" ] || [ -z "$NAMESPACE" ] || [ -z "$OPERATOR_IMAGE" ]; then
98+
echo "Error: Missing required arguments"
99+
help_text
100+
exit 1
101+
fi
102+
103+
cp ${MANIFESTS_GENERATED_CSV} ${TMP_FILE}
104+
105+
# replace placeholder version with a human readable variable name
106+
# that will be used later on by csv-generator
107+
sed -i "s/PLACEHOLDER_CSV_VERSION/${CSV_VERSION}/g" ${TMP_FILE}
108+
sed -i "s/namespace: placeholder/namespace: ${NAMESPACE}/g" ${TMP_FILE}
109+
sed -i "s|REPLACE_IMAGE|${OPERATOR_IMAGE}|g" ${TMP_FILE}
110+
111+
replace_env_var "WATCH_NAMESPACE" $WATCH_NAMESPACE
112+
replace_env_var "KVM_INFO_TAG" $KVM_INFO_TAG
113+
replace_env_var "VALIDATOR_TAG" $VALIDATOR_TAG
114+
replace_env_var "VIRT_LAUNCHER_TAG" $VIRT_LAUNCHER_TAG
115+
replace_env_var "NODE_LABELLER_TAG" $NODE_LABELLER_TAG
116+
replace_env_var "CPU_PLUGIN_TAG" $CPU_PLUGIN_TAG
117+
118+
# dump CSV and CRD manifests to stdout
119+
echo "---"
120+
cat ${TMP_FILE}
121+
rm ${TMP_FILE}
122+
if [ "$DUMP_CRDS" = "true" ]; then
123+
for CRD in $( ls ${CRDS_DIR}/kubevirt_*crd.yaml ); do
124+
echo "---"
125+
cat ${CRD}
126+
done
127+
fi

build/make-csv-generator.sh

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
if [ -x "${BASEPATH}/../operator-sdk" ]; then
6+
OPERATOR_SDK="${BASEPATH}/../operator-sdk"
7+
else
8+
which operator-sdk &> /dev/null || {
9+
echo "operator-sdk not found (see https://github.com/operator-framework/operator-sdk)"
10+
exit 1
11+
}
12+
OPERATOR_SDK="operator-sdk"
13+
fi
14+
15+
MANIFESTS_GENERATED_DIR="manifests/generated"
16+
MANIFESTS_GENERATED_CSV=${MANIFESTS_GENERATED_DIR}/kubevirt-ssp-operator.vVERSION.clusterserviceversion.yaml
17+
PLACEHOLDER_CSV_VERSION="9999.9999.9999"
18+
19+
# Create CSV with placeholder version. The version
20+
# has to be semver compatible in order for the
21+
# operator sdk to create it for us. That's why we
22+
# are using the absurd 9999.9999.9999 version here.
23+
${OPERATOR_SDK} olm-catalog gen-csv --csv-version ${PLACEHOLDER_CSV_VERSION}
24+
25+
# Move CSV to generated folder
26+
mv deploy/olm-catalog/kubevirt-ssp-operator/${PLACEHOLDER_CSV_VERSION}/kubevirt-ssp-operator.v${PLACEHOLDER_CSV_VERSION}.clusterserviceversion.yaml $MANIFESTS_GENERATED_CSV
27+
28+
# cleanup placeholder version's deployment dir
29+
rm -rf mv deploy/olm-catalog/kubevirt-ssp-operator/${PLACEHOLDER_CSV_VERSION}
30+
31+
# replace placeholder version with a human readable variable name
32+
# that will be used later on by csv-generator
33+
sed -i "s/${PLACEHOLDER_CSV_VERSION}/PLACEHOLDER_CSV_VERSION/g" $MANIFESTS_GENERATED_CSV
34+
35+
# inject the CRD and Description related data into the CSV
36+
cp $MANIFESTS_GENERATED_CSV ${MANIFESTS_GENERATED_CSV}.tmp
37+
./build/update-olm.py ${MANIFESTS_GENERATED_CSV}.tmp > ${MANIFESTS_GENERATED_CSV}
38+
rm ${MANIFESTS_GENERATED_CSV}.tmp
39+

build/make-manifests.sh

+1-17
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,6 @@ MANIFESTS_DIR="manifests/kubevirt-ssp-operator"
1414
MANIFESTS_VERSIONED_DIR="${MANIFESTS_DIR}/${TAG}"
1515
IMAGE_PATH="quay.io/fromani/kubevirt-ssp-operator-container:latest"
1616

17-
if [ -x "${BASEPATH}/../operator-sdk" ]; then
18-
OPERATOR_SDK="${BASEPATH}/../operator-sdk"
19-
else
20-
which operator-sdk &> /dev/null || {
21-
echo "operator-sdk not found (see https://github.com/operator-framework/operator-sdk)"
22-
exit 1
23-
}
24-
OPERATOR_SDK="operator-sdk"
25-
fi
26-
2717
HAVE_COURIER=0
2818
if which operator-courier &> /dev/null; then
2919
HAVE_COURIER=1
@@ -53,13 +43,7 @@ for MF in deploy/service_account.yaml deploy/role.yaml deploy/role_binding.yaml
5343
done
5444
) > ${CLUSTER_VERSIONED_DIR}/kubevirt-ssp-operator.yaml
5545

56-
# TODO: we should use --from-version
57-
# note: this creates under deploy/olm-catalog ...
58-
${OPERATOR_SDK} olm-catalog gen-csv --csv-version ${VERSION}
59-
60-
./build/update-olm.py \
61-
deploy/olm-catalog/kubevirt-ssp-operator/${VERSION}/kubevirt-ssp-operator.${TAG}.clusterserviceversion.yaml > \
62-
${MANIFESTS_VERSIONED_DIR}/kubevirt-ssp-operator.${TAG}.clusterserviceversion.yaml
46+
./build/csv-generator.sh --csv-version=${VERSION} --namespace=placeholder --operator-image=REPLACE_IMAGE > ${MANIFESTS_VERSIONED_DIR}/kubevirt-ssp-operator.${TAG}.clusterserviceversion.yaml
6347

6448
# caution: operator-courier (as in 5a4852c) wants *one* entity per yaml file (e.g. it does NOT use safe_load_all)
6549
for CRD in $( ls deploy/crds/kubevirt_*crd.yaml ); do

0 commit comments

Comments
 (0)