Skip to content

Commit 54b29d3

Browse files
Merge pull request #240 from abays/improve_local_webhooks
Improve automated support for local webhooks
2 parents acd4ca2 + b178db3 commit 54b29d3

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

Makefile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -317,15 +317,15 @@ operator-lint: gowork ## Runs operator-lint
317317
go vet -vettool=$(LOCALBIN)/operator-lint ./... ./api/...
318318

319319
# Used for webhook testing
320-
# The configure_local_webhooks.sh script below will remove any OLM webhooks
320+
# The configure_local_webhook.sh script below will remove any OLM webhooks
321321
# for the operator and also scale its deployment replicas down to 0 so that
322322
# the operator can run locally.
323-
# Make sure to cleanup the webhook configuration for local testing by running
324-
# ./hack/clean_local_webhook.sh before deplying with OLM again.
323+
# We will attempt to catch SIGINT/SIGTERM and clean up the local webhooks,
324+
# but it may be necessary to manually run ./hack/clean_local_webhook.sh
325+
# before deploying with OLM again for other untrappable signals.
325326
SKIP_CERT ?=false
326327
.PHONY: run-with-webhook
327328
run-with-webhook: export METRICS_PORT?=8080
328329
run-with-webhook: export HEALTH_PORT?=8081
329330
run-with-webhook: manifests generate fmt vet ## Run a controller from your host.
330-
/bin/bash hack/configure_local_webhook.sh
331-
go run ./main.go -metrics-bind-address ":$(METRICS_PORT)" -health-probe-bind-address ":$(HEALTH_PORT)"
331+
/bin/bash hack/run_with_local_webhook.sh

hack/configure_local_webhook.sh renamed to hack/run_with_local_webhook.sh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
#!/bin/bash
22
set -ex
33

4+
# Define a cleanup function
5+
cleanup() {
6+
echo "Caught signal, cleaning up local webhooks..."
7+
./hack/clean_local_webhook.sh
8+
exit 0
9+
}
10+
11+
# Set trap to catch SIGINT and SIGTERM
12+
trap cleanup SIGINT SIGTERM
13+
414
TMPDIR=${TMPDIR:-"/tmp/k8s-webhook-server/serving-certs"}
515
SKIP_CERT=${SKIP_CERT:-false}
616
CRC_IP=${CRC_IP:-$(/sbin/ip -o -4 addr list crc | awk '{print $4}' | cut -d/ -f1)}
@@ -91,6 +101,23 @@ oc apply -n openstack -f ${TMPDIR}/patch_webhook_configurations.yaml
91101
CSV_NAME="$(oc get csv -n openstack-operators -l operators.coreos.com/designate-operator.openstack-operators -o name)"
92102

93103
if [ -n "${CSV_NAME}" ]; then
104+
CUR_REPLICAS=$(oc get -n openstack-operators "${CSV_NAME}" -o=jsonpath='{.spec.install.spec.deployments[0].spec.replicas}')
105+
CUR_WEBHOOK_DEFS=$(oc get -n openstack-operators "${CSV_NAME}" -o=jsonpath='{.spec.webhookdefinitions}')
106+
107+
# Back-up CSV if it currently uses OLM defaults for deployment replicas or webhook definitions
108+
if [[ "${CUR_REPLICAS}" -gt 0 || ( -n "${CUR_WEBHOOK_DEFS}" && "${CUR_WEBHOOK_DEFS}" != "[]" ) ]]; then
109+
CSV_FILE=$(mktemp -t "$(echo "${CSV_NAME}" | cut -d "/" -f 2).XXXXXX" --suffix .json)
110+
oc get -n openstack-operators "${CSV_NAME}" -o json | \
111+
jq -r 'del(.metadata.generation, .metadata.resourceVersion, .metadata.uid)' > "${CSV_FILE}"
112+
113+
printf \
114+
"\n\tNow patching operator CSV to remove its OLM deployment and associated webhooks.
115+
The original OLM version of the operator's CSV has been copied to %s. To restore it, use:
116+
oc patch -n openstack-operators %s --type=merge --patch-file=%s\n\n" "${CSV_FILE}" "${CSV_NAME}" "${CSV_FILE}"
117+
fi
118+
94119
oc patch "${CSV_NAME}" -n openstack-operators --type=json -p="[{'op': 'replace', 'path': '/spec/install/spec/deployments/0/spec/replicas', 'value': 0}]"
95120
oc patch "${CSV_NAME}" -n openstack-operators --type=json -p="[{'op': 'replace', 'path': '/spec/webhookdefinitions', 'value': []}]"
96121
fi
122+
123+
go run ./main.go -metrics-bind-address ":${METRICS_PORT}" -health-probe-bind-address ":${HEALTH_PORT}"

0 commit comments

Comments
 (0)