auth
무료Authentication and authorization patterns for Rossoctl services
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Rapid UI/backend iteration on HyperShift — edit, build, deploy, Playwright test in under 3 minutes
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
실행 점수 미검증
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Fast iteration loop for Rossoctl UI and backend development on a live HyperShift cluster. Covers the full cycle: edit → commit → push → build → rollout → Playwright test.
# Cluster config
export CLUSTER=sbox42
export MANAGED_BY_TAG=rossoctl-team
export KUBECONFIG=~/clusters/hcp/${MANAGED_BY_TAG}-${CLUSTER}/auth/kubeconfig
export LOG_DIR="${LOG_DIR:-/tmp/rossoctl/tdd/ui-${CLUSTER}}"
mkdir -p "$LOG_DIR"
# Keycloak password (stored in K8s secret, not hardcoded)
export KEYCLOAK_PASSWORD=$(kubectl -n keycloak get secret rossoctl-test-users \
-o jsonpath='{.data.admin-password}' | base64 -d)
# UI URL from OpenShift route
export ROSSOCTL_UI_URL="https://$(kubectl get route rossoctl-ui -n rossoctl-system \
-o jsonpath='{.spec.host}')"
# Working directory
cd "${WORKTREE_DIR:-.worktrees/sandbox-agent}"/rossoctl/ui-v2
Test file changed, no build needed:
KUBECONFIG=$KUBECONFIG ROSSOCTL_UI_URL=$ROSSOCTL_UI_URL \
KEYCLOAK_USER=admin KEYCLOAK_PASSWORD=$KEYCLOAK_PASSWORD \
npx playwright test e2e/<spec>.spec.ts --reporter=list \
> $LOG_DIR/test.log 2>&1; echo "EXIT:$?"
Frontend code changed (components, pages, styles):
# 1. Commit + push
git add -u && git commit -s -m "fix(ui): <description>" && git push
# 2. Build UI image (~90s)
oc -n rossoctl-system start-build rossoctl-ui > $LOG_DIR/ui-build.log 2>&1
# Poll until complete:
while ! oc -n rossoctl-system get build rossoctl-ui-$(oc -n rossoctl-system get bc rossoctl-ui -o jsonpath='{.status.lastVersion}') -o jsonpath='{.status.phase}' 2>/dev/null | grep -qE 'Complete|Failed'; do sleep 10; done
echo "Build: $(oc -n rossoctl-system get build rossoctl-ui-$(oc -n rossoctl-system get bc rossoctl-ui -o jsonpath='{.status.lastVersion}') -o jsonpath='{.status.phase}')"
# 3. Rollout (~15s)
oc -n rossoctl-system rollout restart deploy/rossoctl-ui
oc -n rossoctl-system rollout status deploy/rossoctl-ui --timeout=60s
# 4. Test
npx playwright test e2e/<spec>.spec.ts --reporter=list > $LOG_DIR/test.log 2>&1; echo "EXIT:$?"
Backend Python code changed (routers, services):
# 1. Commit + push
git add -u && git commit -s -m "fix(backend): <description>" && git push
# 2. Build backend image (~30s — Python, no npm)
oc -n rossoctl-system start-build rossoctl-backend > $LOG_DIR/be-build.log 2>&1
# Wait for completion (same polling pattern as UI)
# 3. Rollout
oc -n rossoctl-system rollout restart deploy/rossoctl-backend
oc -n rossoctl-system rollout status deploy/rossoctl-backend --timeout=90s
# 4. Test
npx playwright test e2e/<spec>.spec.ts --reporter=list > $LOG_DIR/test.log 2>&1; echo "EXIT:$?"
git add -u && git commit -s -m "fix: <description>" && git push
# Build both in parallel
oc -n rossoctl-system start-build rossoctl-backend &
oc -n rossoctl-system start-build rossoctl-ui &
wait
# Poll both until complete, then:
oc -n rossoctl-system rollout restart deploy/rossoctl-backend deploy/rossoctl-ui
oc -n rossoctl-system rollout status deploy/rossoctl-backend --timeout=90s
oc -n rossoctl-system rollout status deploy/rossoctl-ui --timeout=90s
# Test
npx playwright test e2e/<spec>.spec.ts --reporter=list > $LOG_DIR/test.log 2>&1; echo "EXIT:$?"
oc -n team1 delete deploy ${AGENT_NAME} --ignore-not-found
oc -n team1 delete svc ${AGENT_NAME} --ignore-not-found
oc -n rossoctl-system logs deploy/rossoctl-backend -c backend --tail=20
oc -n team1 describe pod -l app.kubernetes.io/name=${AGENT_NAME} | grep -A5 "Events\|Error"
oc -n rossoctl-system logs build/rossoctl-ui-$(oc -n rossoctl-system get bc rossoctl-ui -o jsonpath='{.status.lastVersion}') | tail -20
In Playwright tests, navigating to /sandbox?session=<id> via page.goto() triggers
Keycloak re-auth which redirects to /. Use SPA routing instead:
// Login first on /
await page.goto('/');
await loginIfNeeded(page);
// Then SPA-navigate (no full page reload, no Keycloak redirect)
await page.evaluate((sid) => {
window.history.pushState({}, '', `/sandbox?session=${sid}`);
window.dispatchEvent(new PopStateEvent('popstate'));
}, sessionId);
Before each iteration:
After green tests:
npx playwright test --reporter=listtest:ui — Playwright test writing patterns and selectorstdd:hypershift — Python E2E tests via hypershift-full-test.shrossoctl:ui-debug — Debug 502s, proxy issues, auth problemsk8s:live-debugging — Debug pods, logs, configs on live cluster아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Authentication and authorization patterns for Rossoctl services
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Create confidential OAuth2 clients in Keycloak for server-to-service authentication
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Configure MLflow with mlflow-oidc-auth plugin for Keycloak OIDC authentication
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Configure OpenTelemetry Collector with OAuth2 authentication for trace export
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
CI pipeline monitoring, status checks, and PR validation workflows
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Monitor running CI jobs, wait for completion, create tasks for results
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.