55# Services:
66# 1. kagenti-controller-manager (operator)
77# 2. bundle-service (OPA bundle server)
8+ # 3. token-broker (OAuth token management)
89#
910# Usage:
1011# ./hack/kind-reload-all.sh [kind-cluster-name] [namespace]
@@ -25,6 +26,7 @@ IMAGE_TAG="$(git -C "${ROOT_DIR}" rev-parse --short HEAD)"
2526
2627OPERATOR_IMG=" localhost/kagenti-operator:${IMAGE_TAG} "
2728BUNDLE_IMG=" localhost/bundle-service:${IMAGE_TAG} "
29+ TOKEN_BROKER_IMG=" localhost/token-broker:${IMAGE_TAG} "
2830
2931echo " ============================================"
3032echo " Building and loading to Kind: ${CLUSTER} "
@@ -52,16 +54,31 @@ echo ""
5254echo " ==> Building kagenti-operator image"
5355${CONTAINER_TOOL} build -t " ${OPERATOR_IMG} " -f " ${ROOT_DIR} /Dockerfile" " ${ROOT_DIR} "
5456
55- echo " "
56- echo " ==> Building bundle-service image"
57- ${CONTAINER_TOOL} build -t " ${BUNDLE_IMG} " -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" " ${ROOT_DIR} "
57+ if [ -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" ]; then
58+ echo " "
59+ echo " ==> Building bundle-service image"
60+ ${CONTAINER_TOOL} build -t " ${BUNDLE_IMG} " -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" " ${ROOT_DIR} "
61+ fi
62+
63+ if [ -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" ]; then
64+ echo " "
65+ echo " ==> Building token-broker image"
66+ ${CONTAINER_TOOL} build -t " ${TOKEN_BROKER_IMG} " -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" " ${ROOT_DIR} "
67+ fi
5868
5969# --- Load into Kind ---
6070
6171echo " "
6272echo " ==> Loading images into Kind cluster '${CLUSTER} '"
6373kind load docker-image " ${OPERATOR_IMG} " --name " ${CLUSTER} "
64- kind load docker-image " ${BUNDLE_IMG} " --name " ${CLUSTER} "
74+
75+ if [ -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" ]; then
76+ kind load docker-image " ${BUNDLE_IMG} " --name " ${CLUSTER} "
77+ fi
78+
79+ if [ -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" ]; then
80+ kind load docker-image " ${TOKEN_BROKER_IMG} " --name " ${CLUSTER} "
81+ fi
6582
6683# --- Deploy kagenti-controller-manager ---
6784
7693 echo " (the controller-manager requires webhook certs, RBAC, and CRDs from kustomize)"
7794fi
7895
79- # --- Deploy bundle-service ---
96+ # --- Deploy bundle-service (if source exists) ---
8097
98+ if [ -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" ]; then
8199echo " "
82100echo " ==> Deploying bundle-service"
83101
@@ -210,23 +228,87 @@ spec:
210228 targetPort: http
211229 protocol: TCP
212230EOF
231+ fi
232+
233+ # --- Deploy token-broker (if source exists) ---
234+
235+ if [ -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" ]; then
236+ echo " "
237+ echo " ==> Deploying token-broker"
238+
239+ # Load OAuth credentials from .env
240+ if [ -f " ${ROOT_DIR} /.env" ]; then
241+ export $( grep -v ' ^#' " ${ROOT_DIR} /.env" | grep -v ' ^\s*$' | xargs)
242+ fi
243+
244+ if [ -z " ${GITHUB_OAUTH_CLIENT_ID:- } " ] || [ -z " ${GITHUB_OAUTH_CLIENT_SECRET:- } " ]; then
245+ echo " ERROR: OAuth credentials not set."
246+ echo " Create ${ROOT_DIR} /.env with:"
247+ echo " GITHUB_OAUTH_CLIENT_ID=<your-client-id>"
248+ echo " GITHUB_OAUTH_CLIENT_SECRET=<your-client-secret>"
249+ echo " See .env.example for reference."
250+ exit 1
251+ fi
252+
253+ # Create/update OAuth secret
254+ kubectl delete secret github-oauth-credentials -n " ${NAMESPACE} " 2> /dev/null || true
255+ kubectl create secret generic github-oauth-credentials \
256+ --from-literal=client-id=" ${GITHUB_OAUTH_CLIENT_ID} " \
257+ --from-literal=client-secret=" ${GITHUB_OAUTH_CLIENT_SECRET} " \
258+ --namespace=" ${NAMESPACE} "
259+ echo " OAuth secret created"
260+
261+ # Apply the deployment manifests (single source of truth).
262+ # These pin namespace kagenti-system and include the OAuth-callback HTTPRoute
263+ # (attached to the shared "http" gateway). The secret is created above from
264+ # .env, so the secret example manifest is intentionally skipped.
265+ DEPLOY_DIR=" ${ROOT_DIR} /cmd/token-broker/deploy"
266+ kubectl apply \
267+ -f " ${DEPLOY_DIR} /00-serviceaccount.yaml" \
268+ -f " ${DEPLOY_DIR} /02-deployment.yaml" \
269+ -f " ${DEPLOY_DIR} /03-service.yaml" \
270+ -f " ${DEPLOY_DIR} /04-httproute.yaml"
271+
272+ # Inject the freshly built, git-tagged image (the manifest carries a placeholder
273+ # tag with imagePullPolicy: IfNotPresent; kind-loaded images need Never).
274+ kubectl set image deployment/token-broker \
275+ token-broker=" ${TOKEN_BROKER_IMG} " \
276+ -n " ${NAMESPACE} "
277+ kubectl patch deployment/token-broker -n " ${NAMESPACE} " --type=json \
278+ -p=' [{"op":"replace","path":"/spec/template/spec/containers/0/imagePullPolicy","value":"Never"}]'
279+ echo " token-broker manifests applied (image ${TOKEN_BROKER_IMG} )"
280+ fi
213281
214282# --- Delete pods to pick up the new images ---
215283
216284echo " "
217285echo " ==> Deleting pods to pick up new images"
218- kubectl delete pods -n " ${NAMESPACE} " -l app=bundle-service --wait=false
219286kubectl delete pods -n " ${NAMESPACE} " -l control-plane=controller-manager --wait=false 2> /dev/null || true
220287
288+ if [ -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" ]; then
289+ kubectl delete pods -n " ${NAMESPACE} " -l app=bundle-service --wait=false
290+ fi
291+
292+ if [ -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" ]; then
293+ kubectl delete pods -n " ${NAMESPACE} " -l app=token-broker --wait=false
294+ fi
295+
221296# --- Wait for rollouts ---
222297
223298echo " "
224299echo " ==> Waiting for kagenti-controller-manager rollout"
225300kubectl rollout status deployment/kagenti-controller-manager -n " ${NAMESPACE} " --timeout=120s 2> /dev/null || \
226301 echo " WARNING: kagenti-controller-manager rollout did not complete"
227302
228- echo " ==> Waiting for bundle-service rollout"
229- kubectl rollout status deployment/bundle-service -n " ${NAMESPACE} " --timeout=60s
303+ if [ -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" ]; then
304+ echo " ==> Waiting for bundle-service rollout"
305+ kubectl rollout status deployment/bundle-service -n " ${NAMESPACE} " --timeout=60s
306+ fi
307+
308+ if [ -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" ]; then
309+ echo " ==> Waiting for token-broker rollout"
310+ kubectl rollout status deployment/token-broker -n " ${NAMESPACE} " --timeout=60s
311+ fi
230312
231313# --- Summary ---
232314
@@ -236,12 +318,35 @@ echo " Done!"
236318echo " "
237319echo " Images loaded:"
238320echo " ${OPERATOR_IMG} "
239- echo " ${BUNDLE_IMG} "
321+ if [ -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" ]; then
322+ echo " ${BUNDLE_IMG} "
323+ fi
324+ if [ -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" ]; then
325+ echo " ${TOKEN_BROKER_IMG} "
326+ fi
240327echo " "
241328echo " Namespace: ${NAMESPACE} "
242329echo " - kagenti-controller-manager"
243- echo " - bundle-service"
330+ if [ -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" ]; then
331+ echo " - bundle-service"
332+ fi
333+ if [ -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" ]; then
334+ echo " - token-broker"
335+ fi
244336echo " "
245- echo " bundle-service URL: http://bundle-service.${NAMESPACE} .svc.cluster.local:8080"
246- echo " To port-forward: kubectl port-forward -n ${NAMESPACE} svc/bundle-service 8080:8080"
337+ if [ -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" ]; then
338+ echo " bundle-service URL: http://bundle-service.${NAMESPACE} .svc.cluster.local:8080"
339+ fi
340+ if [ -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" ]; then
341+ echo " token-broker URL: http://token-broker.${NAMESPACE} .svc.cluster.local:8190"
342+ echo " OAuth callback: http://token-broker.localtest.me:8080/oauth/callback (via 'http' gateway)"
343+ fi
344+ echo " "
345+ echo " To port-forward:"
346+ if [ -f " ${ROOT_DIR} /cmd/bundle-service/Dockerfile" ]; then
347+ echo " kubectl port-forward -n ${NAMESPACE} svc/bundle-service 8080:8080"
348+ fi
349+ if [ -f " ${ROOT_DIR} /cmd/token-broker/Dockerfile" ]; then
350+ echo " kubectl port-forward -n ${NAMESPACE} svc/token-broker 8190:8190"
351+ fi
247352echo " ============================================"
0 commit comments