auth
無料Authentication and authorization patterns for Rossoctl services
日本語の概要は準備中です。原文の説明を表示しています。
TDD workflow with HyperShift cluster - real-time debugging with full cluster access
日本語の概要は準備中です。原文の説明を表示しています。
実行スコア 未検証
インストール方法を見るインストールする前に、エージェントに与えられる指示の中身を確認できます。
Test-driven development workflow using hypershift-full-test.sh phases for Rossoctl development.
Every command that produces more than ~5 lines of output MUST redirect to a file. This prevents context window pollution that drives up session cost.
# Session-scoped log directory — use $WORKTREE to avoid collisions between parallel sessions
export LOG_DIR=$LOG_DIR/$WORKTREE
mkdir -p $LOG_DIR
# WRONG — dumps hundreds of lines into context:
.worktrees/$WORKTREE/.github/scripts/local-setup/hypershift-full-test.sh $CLUSTER --include-test
# RIGHT — captures output, returns only exit code:
.worktrees/$WORKTREE/.github/scripts/local-setup/hypershift-full-test.sh $CLUSTER \
--include-test > $LOG_DIR/test-run.log 2>&1; echo "EXIT:$?"
# If EXIT:0 → "Tests passed"
# If EXIT:1 → Use Task(subagent_type='Explore') to read $LOG_DIR/test-run.log and report failures
# WRONG:
kubectl get pods -n rossoctl-system
kubectl logs -n team1 deployment/weather-service --tail=100
# RIGHT:
kubectl get pods -n rossoctl-system > $LOG_DIR/pods.log 2>&1 && echo "OK: pods listed" || echo "FAIL (see $LOG_DIR/pods.log)"
kubectl logs -n team1 deployment/weather-service --tail=100 > $LOG_DIR/weather-logs.log 2>&1 && echo "OK" || echo "FAIL"
# Only read the log file in a subagent if you need to analyze failures
# WRONG:
oc start-build weather-tool -n team1 --follow
# RIGHT:
oc start-build weather-tool -n team1 --follow > $LOG_DIR/build.log 2>&1; echo "EXIT:$?"
# If non-zero, use Task(subagent_type='Explore') to read $LOG_DIR/build.log
NEVER read large log files in the main context. Always use subagents:
Task(subagent_type='Explore') to read the log and extract relevant infoFull cluster access enables real-time debugging that CI cannot provide:
| Advantage | How |
|---|---|
| Inspect pod state | k8s:pods, k8s:logs, k8s:health |
| Live debugging | k8s:live-debugging |
| Immediate feedback | Run tests, check logs, fix, repeat |
| Access secrets/configs | kubectl get secret/configmap |
Use tdd:ci when you don't have a cluster or for final CI validation.
Before starting, check for an existing HyperShift cluster:
ls ~/clusters/hcp/rossoctl-hypershift-custom-*/auth/kubeconfig 2>/dev/null
If no cluster exists, ask the user:
No HyperShift cluster found. Create one for debugging?
- Cluster creation takes ~15-20 minutes and requires approval
- Use
hypershift:clusterto create- Alternatively, use
tdd:ciortdd:kindwhich don't need a cluster
If approved, create with (requires user approval):
./.github/scripts/hypershift/create-cluster.sh <suffix>
Auto-approved: All operations on hosted clusters (read + write) are auto-approved. Cluster create/destroy targets the management cluster and requires user approval.
flowchart TD
START(["/tdd:hypershift"]) --> CLUSTER{"Cluster available?"}
CLUSTER -->|Yes| SETENV["Set KUBECONFIG + env vars"]:::k8s
CLUSTER -->|No| ASK{"Create cluster?"}
ASK -->|Yes| CREATECLUSTER["hypershift:cluster create"]:::hypershift
ASK -->|No| FALLBACK([Use tdd:ci or tdd:kind])
CREATECLUSTER --> SETENV
SETENV --> CVEGATE["CVE Gate: cve:scan"]:::cve
CVEGATE -->|Clean| ITER{"Iteration level?"}
CVEGATE -->|CVE found| CVE_HOLD["cve:brainstorm"]:::cve
CVE_HOLD -->|Resolved| ITER
ITER -->|Level 0| L0["Quick patch (seconds)"]:::test
ITER -->|Level 1| L1["Test only"]:::test
ITER -->|Level 2| L2["Rebuild images"]:::test
ITER -->|Level 3| L3["Full reinstall (~25 min)"]:::test
ITER -->|Level 4| L4["Fresh cluster"]:::hypershift
L0 --> TEST["Run tests"]:::test
L1 --> TEST
L2 --> TEST
L3 --> TEST
L4 --> SETENV
TEST --> RESULT{"Tests pass?"}
RESULT -->|Yes| BRANCHCHECK{"Branch verified?"}
RESULT -->|No| DEBUG["Debug with k8s:pods, k8s:logs"]:::k8s
DEBUG --> FIX["Fix code"]:::tdd
FIX --> ITER
BRANCHCHECK -->|Yes| COMMIT["git:commit"]:::git
BRANCHCHECK -->|Wrong branch| WORKTREE["Create worktree"]:::git
WORKTREE --> COMMIT
COMMIT --> CI([Back to tdd:ci for CI validation])
classDef tdd fill:#4CAF50,stroke:#333,color:white
classDef rca fill:#FF5722,stroke:#333,color:white
classDef git fill:#FF9800,stroke:#333,color:white
classDef k8s fill:#00BCD4,stroke:#333,color:white
classDef hypershift fill:#3F51B5,stroke:#333,color:white
classDef ci fill:#2196F3,stroke:#333,color:white
classDef test fill:#9C27B0,stroke:#333,color:white
classDef cve fill:#D32F2F,stroke:#333,color:white
Follow this diagram as the workflow.
MANDATORY before deploying to cluster. Container images may contain vulnerable dependencies.
Invoke cve:scan on the working tree before any deployment iteration:
cve:scan returns clean → proceed to iteration selectioncve:scan finds HIGH/CRITICAL CVEs → cve:brainstorm activates a CVE hold
cve:brainstorm for resolution stepsThis gate runs once per session, not on every iteration.
Always run from main repo, pointing to worktree scripts:
export CLUSTER=mlflow WORKTREE=mlflow-ci MANAGED_BY_TAG=${MANAGED_BY_TAG:-rossoctl-hypershift-custom}
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig \
.worktrees/$WORKTREE/.github/scripts/local-setup/hypershift-full-test.sh $CLUSTER \
--include-test [--pytest-filter "filter"]
Prefer quick targeted changes over full reinstall. Full reinstall takes ~25 min. Targeted changes take ~30 seconds.
Patch a ConfigMap, restart a pod, or update a deployment directly:
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig kubectl rollout restart deployment/otel-collector -n rossoctl-system
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig kubectl rollout restart deployment/mlflow -n rossoctl-system
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig kubectl delete pod -n team1 -l app.kubernetes.io/name=weather-service
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig \
.worktrees/$WORKTREE/.github/scripts/local-setup/hypershift-full-test.sh $CLUSTER \
--include-test --pytest-filter "test_agent or test_mlflow" \
> $LOG_DIR/test-iter1.log 2>&1; echo "EXIT:$?"
Use OpenShift Builds or Shipwright to rebuild images from dependency repos directly on the cluster:
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig \
oc start-build weather-tool -n team1 --follow \
> $LOG_DIR/build.log 2>&1; echo "EXIT:$?"
Or trigger a Shipwright BuildRun for the weather-service:
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig kubectl create -f .worktrees/$WORKTREE/rossoctl/examples/agents/weather_agent_shipwright_buildrun.yaml
After rebuild, delete the pod to pick up the new image:
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig kubectl delete pod -n team1 -l app.kubernetes.io/name=weather-service
Only when chart values or CRDs change:
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig \
.worktrees/$WORKTREE/.github/scripts/local-setup/hypershift-full-test.sh $CLUSTER \
--include-uninstall --include-install --include-agents --include-test \
> $LOG_DIR/full-reinstall.log 2>&1; echo "EXIT:$?"
Only when the cluster itself is broken:
./.github/scripts/hypershift/create-cluster.sh $CLUSTER
When debugging issues in agent-examples or cortex, build custom images directly on the cluster using Shipwright/OpenShift Builds:
# Point build spec to your fork/branch
# Edit the source in weather_agent_shipwright_build_ocp.yaml:
# url: https://github.com/YourFork/agent-examples
# revision: your-branch
# Apply and trigger build
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig kubectl apply -f .worktrees/$WORKTREE/rossoctl/examples/agents/weather_agent_shipwright_build_ocp.yaml
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig kubectl create -f .worktrees/$WORKTREE/rossoctl/examples/agents/weather_agent_shipwright_buildrun.yaml
Watch the build:
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig \
kubectl get buildrun -n team1 -w > $LOG_DIR/buildrun.log 2>&1; echo "EXIT:$?"
After build succeeds, restart the deployment:
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig kubectl rollout restart deployment/weather-service -n team1
Important: Always run agent tests before observability tests to generate fresh traces:
# CORRECT: Run agent + observability together
--pytest-filter "test_agent or test_mlflow"
# WRONG: Observability alone may find stale traces
--pytest-filter "test_mlflow" # May give false positives
export CLUSTER=mlflow WORKTREE=mlflow-ci MANAGED_BY_TAG=${MANAGED_BY_TAG:-rossoctl-hypershift-custom}
# 1. Make changes in worktree
vim .worktrees/$WORKTREE/rossoctl/tests/e2e/common/test_mlflow_traces.py
# 2. Run specific tests
KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig \
.worktrees/$WORKTREE/.github/scripts/local-setup/hypershift-full-test.sh $CLUSTER \
--include-test --pytest-filter "test_agent or TestRootSpanAttributes"
# 3. Fix issues, repeat step 2
export CLUSTER=mlflow MANAGED_BY_TAG=${MANAGED_BY_TAG:-rossoctl-hypershift-custom}
export KUBECONFIG=~/clusters/hcp/$MANAGED_BY_TAG-$CLUSTER/auth/kubeconfig
# Always redirect kubectl output to files
kubectl get pods -n rossoctl-system > $LOG_DIR/pods-system.log 2>&1 && echo "OK" || echo "FAIL"
kubectl logs -n rossoctl-system -l app=mlflow --tail=50 > $LOG_DIR/mlflow.log 2>&1 && echo "OK" || echo "FAIL"
kubectl get pods -n team1 > $LOG_DIR/pods-team1.log 2>&1 && echo "OK" || echo "FAIL"
# Use Task(subagent_type='Explore') to read logs only when investigating failures
Keep a log of test iterations in a TODO file for debugging:
## Iteration Log
| DateTime | Cluster | mlflow-ci Commit | agent-examples Commit | Pass | Fail | Skip | Notes |
|----------|---------|------------------|----------------------|------|------|------|-------|
| 2026-02-05 14:30:15 | mlfl1 | 8dbaee15 | 3524675 | 33 | 2 | 8 | Baseline |
| 2026-02-05 15:45:22 | mlfl1 | abc1234 | def5678 | 35 | 0 | 8 | Fixed X |
Create iteration tracker:
# Add to TODO file after each test run
echo "| $(date '+%Y-%m-%d %H:%M:%S') | $CLUSTER | $(git -C .worktrees/$WORKTREE rev-parse --short HEAD) | $(git -C .worktrees/agent-examples rev-parse --short HEAD) | PASS | FAIL | SKIP | Notes |" >> .worktrees/$WORKTREE/TODO_ITERATION_LOG.md
Once the issue is fixed with real-time debugging, return to tdd:ci for final CI validation:
tdd:ci to verify CI passesFor Playwright UI tests (login, navigation, agent chat), invoke test:ui.
Set ROSSOCTL_UI_URL to the OpenShift route and run against the live cluster.
After the TDD workflow completes (CI green and PR approved/merged), invoke session:post to capture session metadata:
This is optional but recommended for tracking development effort.
test:ui - Write and run Playwright UI teststdd:ci - CI-driven TDD (escalates here after 3+ failures)local:full-test - Complete testing referencek8s:live-debugging - Debug issues on running clusterk8s:pods - Debug pod issuesk8s:logs - Query component logshypershift:cluster - Create/destroy clusterstest:run-hypershift - Run tests on HyperShifttest:review - Review test qualitygit:commit - Commit formatsession:post - Post session analytics to PRcve:scan - CVE scanning gate (pre-deploy)cve:brainstorm - CVE disclosure planning (if CVEs found)まだレビューはありません。使ってみた感想をお寄せください。
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
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
日本語の概要は準備中です。原文の説明を表示しています。