Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,8 @@ Do not use `gh cache delete --all`: it also removes the entries the current poli
(`spring.grpc.client.channel.<name>.target`). Never `ServerBuilder` or `ManagedChannelBuilder` by hand.
The protobuf plugin stays xolstice 0.6.1: the Boot-managed `io.github.ascopes` plugin fails under the
UBI image's packaged Maven. .NET callers use the gRPC client factory (`AddGrpcClient`).
Traces come from the OTel Java agent alone: do not add a Micrometer tracing bridge, or Spring gRPC's
observation interceptor adds a second span per call.

## House test tools (prefer these; don't introduce alternatives)

Expand Down
2 changes: 1 addition & 1 deletion _plans/examples-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ Build 20 runnable examples referenced by the tutorial site, each demonstrating p
- Debezium (example 04)
- flagd (example 27)

### Minikube Stack (optional, added later in the modernization plan)
### Minikube Stack (optional; S9 ran Example 05 on minikube, Appendix R, and S10 on OpenShift Local, Appendix S)
- **Base**: Istio + KEDA + Strimzi + CloudNativePG + LGTM (covered by `lgtm-minikube-stack`)
- **Opt-ins**:
- Apicurio (example 09)
Expand Down
11 changes: 11 additions & 0 deletions _plans/s14-resilience-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,3 +170,14 @@ slack; Polly's breaker state lives per typed client, so `/breaker-state` must re
SmallRye FT annotations need CDI-intercepted calls (not `this.` calls); Spring gRPC's port and health defaults
versus the compose wiring; the OTel agent and Spring gRPC's own observation both instrumenting gRPC (double spans);
Conan cache churn if C++ dependencies change (they should not).

Outcome (2026-10-15): the breaker windows, half-open rules, Polly's per-client state, CDI interception and the Spring
gRPC defaults were all settled by the 111/111 matrix. The two left open are closed:

- Reset wait: `verify.sh` no longer sleeps a fixed 11 s. It waits the 10 s open period, then calls `/with-breaker`
once a second until `/breaker-state` reports closed (at most 20 s), so the slack no longer depends on one
library's timing. Verified on all six languages.
- Double spans: none. In Example 11 (Spring Boot) a `POST /orders` trace holds one gRPC CLIENT span in
order-service and one SERVER span in inventory-service, both from the OTel agent (`io.opentelemetry.grpc-1.6`),
the server span parented on the client span. Spring gRPC's observation interceptor creates no spans because
Micrometer Tracing is not on the classpath; adding a Micrometer tracing bridge would bring the duplicates back.
7 changes: 3 additions & 4 deletions examples/01-cloud-native-principles/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/02-communications/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/03-composition/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/04-data/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@ CONNECT="${CONNECT:-http://localhost:8083}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/06-stream-processing/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/09-api-registry/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@ REGISTRY="${REGISTRY:-$BASE/apis/registry/v3}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/11-observability/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@ TEMPO="${TEMPO:-http://localhost:3200}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/12-security/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/16-websockets/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@ POD2="${POD2:-http://localhost:8082}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/17-sagas/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/18-errors/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/19-ddd-hexagonal/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/21-graceful-shutdown/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/22-l7-routing/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@ ROUTER="${ROUTER:-http://localhost:8090}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/24-monolith-to-microservices/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@ DECORATOR="${DECORATOR:-http://localhost:8091}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/25-caching/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
23 changes: 13 additions & 10 deletions examples/26-failure-modes/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@ BACKEND="${BACKEND:-http://localhost:8081}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down Expand Up @@ -177,15 +176,19 @@ else
fi

# --- Breaker recovery ---
printf ' \xe2\x86\x92 restoring backend and waiting for breaker reset (11s)...\n'
printf ' \xe2\x86\x92 restoring backend; the breaker stays open 10s, then trial calls close it...\n'
curl $CURL_OPTS -s -X POST -H 'Content-Type: application/json' \
-d '{"mode":"healthy"}' "$BACKEND/mode" >/dev/null
sleep 11
sleep 10

# First call after reset should trigger half-open → trial
curl $CURL_OPTS -sf "$EDGE/with-breaker" >/dev/null 2>&1
curl $CURL_OPTS -sf "$EDGE/with-breaker" >/dev/null 2>&1
curl $CURL_OPTS -sf "$EDGE/with-breaker" >/dev/null 2>&1
# Poll rather than wait a fixed time: the libraries end the open period at slightly different moments, and the
# first call after it is the half-open trial (Polly closes after one success, the others after two). A call made
# while the breaker is still open only gets the fallback, so polling is harmless. Give up after 20 s.
for _ in $(seq 1 20); do
curl $CURL_OPTS -sf "$EDGE/with-breaker" >/dev/null 2>&1
curl $CURL_OPTS -sf "$EDGE/breaker-state" 2>/dev/null | grep -q '"state":"closed"' && break
sleep 1
done

check "breaker recovered to closed after successful trials" \
"curl $CURL_OPTS -sf $EDGE/breaker-state" \
Expand Down
7 changes: 3 additions & 4 deletions examples/27-feature-flags/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/28-newman/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ BASE="${BASE:-http://localhost:8080}"
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
7 changes: 3 additions & 4 deletions examples/30-blazor-signalr/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@ BASE2="${BASE2:-http://localhost:8081}" # second dashboard instance, same Redis
CURL_OPTS="${CURL_OPTS:-}"

# Container operations go through these helpers so the checks do not hard-code
# an engine. RUNTIME=openshift is added later: a ctr_target function will map
# a container name (cndp-kafka, cndp-postgres, ...) to its pod and each helper
# will call `oc exec` / `oc logs` instead.
# an engine. This example runs on Docker Compose only (RUNTIME=docker); Example 05's
# verify.sh shows the RUNTIME=kubernetes variant used on minikube and OpenShift Local.
case "$RUNTIME" in
docker) ;;
*) echo "RUNTIME=$RUNTIME not supported yet" >&2; exit 1 ;;
*) echo "RUNTIME=$RUNTIME not supported (docker)" >&2; exit 1 ;;
esac
ctr_exec() { docker exec "$@"; }
ctr_logs() { docker logs "$@"; }
Expand Down
Loading