Skip to main content
Glama
HYBRID_WORKFLOW_VISUAL_GUIDE.mdβ€’16.4 kB
# ARC Hybrid Workflow - Visual Guide ## 🎯 The Big Picture ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ HYBRID WORKFLOW OVERVIEW β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ User MCP Tool Git Repo K8s Cluster β”‚ β”‚ β”‚ β”‚ β”‚ 1. Generate Config β”‚ β”‚ β”‚ │─────────────────────────>β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ 2. Create YAML β”‚ β”‚ β”‚ │───────────────────────>β”‚ β”‚ β”‚ β”‚ configs/ β”‚ β”‚ β”‚ β”‚ controller.yaml β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ 3. Review/Edit Config β”‚ β”‚ β”‚ β”‚<─────────────────────────│ β”‚ β”‚ β”‚ (Optional) β”‚ β”‚ β”‚ │───────────────────────────────────────────────────>β”‚ β”‚ β”‚ Edit values: section β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ 4. Apply Config β”‚ β”‚ β”‚ │─────────────────────────>β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ 5. Read Config β”‚ β”‚ β”‚ β”‚<───────────────────────│ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ 6. Build Helm CMD β”‚ β”‚ β”‚ β”‚ + Execute β”‚ β”‚ β”‚ │───────────────────────────────────────>β”‚ β”‚ β”‚ helm upgrade β”‚ β”‚ β”‚ β”‚ --install --set ... β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ 7. Success! β”‚<───────────────────────────────────────│ β”‚<─────────────────────────│ β”‚ β”‚ β”‚ Show status β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ ``` ## πŸ“ Step-by-Step Workflow ### Step 1: Generate Configuration **Command**: `#arc_install_controller_hybrid --apply false` ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ What Happens: β”‚ β”‚ 1. Tool generates configs/controller.yaml β”‚ β”‚ 2. File contains: β”‚ β”‚ - chart: (where to get Helm chart) β”‚ β”‚ - release: (how to install it) β”‚ β”‚ - values: {} (empty, ready for customization) β”‚ β”‚ - metadata: (tracking info) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` **Output**: Configuration file created at `configs/controller.yaml` --- ### Step 2: Review & Edit (Optional) **File**: `configs/controller.yaml` ```yaml # Before (Generated) values: {} # After (Edited by User) values: replicaCount: 2 resources: limits: memory: 512Mi ``` ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Why Edit the Config? β”‚ β”‚ βœ“ Customize resource limits β”‚ β”‚ βœ“ Add node selectors/tolerations β”‚ β”‚ βœ“ Configure high availability β”‚ β”‚ βœ“ Set up monitoring/logging β”‚ β”‚ βœ“ Apply security policies β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ### Step 3: Apply Configuration **Command**: `#arc_apply_config --configType controller` ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ What Happens: β”‚ β”‚ β”‚ β”‚ 1. Tool reads configs/controller.yaml β”‚ β”‚ β”‚ β”‚ 2. Extracts configuration: β”‚ β”‚ - Chart URL: oci://ghcr.io/.../gha-runner-scale-set-... β”‚ β”‚ - Release name: arc-controller β”‚ β”‚ - Namespace: arc-systems β”‚ β”‚ - Values: { replicaCount: 2, resources: {...} } β”‚ β”‚ β”‚ β”‚ 3. Builds Helm command: β”‚ β”‚ helm upgrade arc-controller \ β”‚ β”‚ oci://... \ β”‚ β”‚ --install \ β”‚ β”‚ --namespace arc-systems \ β”‚ β”‚ --create-namespace \ β”‚ β”‚ --set replicaCount=2 \ β”‚ β”‚ --set resources.limits.memory=512Mi β”‚ β”‚ β”‚ β”‚ 4. Executes command β”‚ β”‚ β”‚ β”‚ 5. Shows status of deployed resources β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## πŸ”„ Value Transformation ### How `values:` Becomes `--set` Arguments ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Config File (YAML) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ values: β”‚ β”‚ replicaCount: 2 β”‚ β”‚ resources: β”‚ β”‚ limits: β”‚ β”‚ cpu: "500m" β”‚ β”‚ memory: "512Mi" β”‚ β”‚ requests: β”‚ β”‚ cpu: "250m" β”‚ β”‚ nodeSelector: β”‚ β”‚ kubernetes.io/os: linux β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ Tool Flattens β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Helm Command Arguments β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ --set replicaCount=2 β”‚ β”‚ --set resources.limits.cpu=500m β”‚ β”‚ --set resources.limits.memory=512Mi β”‚ β”‚ --set resources.requests.cpu=250m β”‚ β”‚ --set nodeSelector.kubernetes\.io/os=linux β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` **Flattening Rules**: - Simple values: `key: value` β†’ `--set key=value` - Nested objects: `parent.child: value` β†’ `--set parent.child=value` - Special chars: Escaped automatically (`kubernetes.io/os` β†’ `kubernetes\.io/os`) --- ## 🎭 Two Paths: Config vs Manual ### Path 1: Using the Config (Recommended) βœ… ``` #arc_apply_config --configType controller β”‚ β”œβ”€> Reads configs/controller.yaml β”œβ”€> Extracts all values β”œβ”€> Builds Helm command with --set flags β”œβ”€> Executes: helm upgrade ... --set key=value ... └─> Uses YOUR custom configuration ``` **Benefits**: - βœ… Uses your custom values - βœ… Version controlled - βœ… Repeatable - βœ… Auditable --- ### Path 2: Manual Installation (Bypasses Config) ⚠️ ``` helm install arc-controller \ oci://ghcr.io/.../gha-runner-scale-set-controller \ --namespace arc-systems \ --create-namespace β”‚ β”œβ”€> Does NOT read configs/controller.yaml β”œβ”€> Uses Helm chart defaults only └─> Ignores your custom values ``` **Limitations**: - ⚠️ Ignores your config file - ⚠️ Uses default values only - ⚠️ No version control - ⚠️ Hard to reproduce --- ## πŸ” Config File Anatomy ```yaml β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ configs/controller.yaml β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ chart: # ← Chart Information β”‚ β”‚ repository: oci://... # Where to get the Helm chart β”‚ β”‚ name: gha-runner-... # Chart name β”‚ β”‚ version: latest # Chart version β”‚ β”‚ β”‚ β”‚ release: # ← Release Configuration β”‚ β”‚ name: arc-controller # Helm release name β”‚ β”‚ namespace: arc-systems # K8s namespace β”‚ β”‚ createNamespace: true # Create if doesn't exist β”‚ β”‚ β”‚ β”‚ values: # ← YOUR CUSTOMIZATIONS β”‚ β”‚ # Add custom Helm # Everything here becomes β”‚ β”‚ # values here # a --set argument β”‚ β”‚ replicaCount: 2 # --set replicaCount=2 β”‚ β”‚ resources: {...} # --set resources.limits.cpu=... β”‚ β”‚ β”‚ β”‚ metadata: # ← Tracking Info (Not used by Helm)β”‚ β”‚ managedBy: arc-config-mcp # Tool identifier β”‚ β”‚ mode: hybrid # Deployment mode β”‚ β”‚ generatedAt: 2025-... # Timestamp β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## 🎯 Decision Tree: Which Option to Use? ``` Need to customize Helm values? β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ YES NO β”‚ β”‚ β–Ό β–Ό Use #arc_apply_config Either option works (Option 1) (but Option 1 is better β”‚ for version control) β”‚ └─> Edit configs/controller.yaml first to add your custom values ``` --- ## πŸ’‘ Pro Tips ### 1. Always Use Version Control ```bash # After generating or editing config git add configs/ git commit -m "chore(arc): Update controller config" git push ``` ### 2. Review Before Applying ```bash # See what will be executed cat configs/controller.yaml # Check current cluster state kubectl get all -n arc-systems ``` ### 3. Test in Dev First ```bash # Use a dev namespace for testing #arc_install_controller_hybrid --namespace arc-dev --apply false # Review, then apply #arc_apply_config --configType controller ``` ### 4. Use Drift Detection ```bash # Check if cluster matches your config #arc_detect_drift ``` --- ## πŸš€ Quick Start Example ```bash # 1. Generate config (don't apply yet) #arc_install_controller_hybrid --apply false # 2. Edit the config to add custom values # Edit: configs/controller.yaml # Add: # values: # replicaCount: 2 # resources: # limits: # memory: 512Mi # 3. Commit your changes git add configs/controller.yaml git commit -m "feat: Add HA controller config" # 4. Apply the configuration #arc_apply_config --configType controller # 5. Verify it worked kubectl get pods -n arc-systems ``` --- ## πŸ“š Related Documentation - **Main Guide**: `docs/HYBRID_WORKFLOW_CLARITY.md` - **Examples**: `examples/controller-with-values.yaml.md` - **Code Documentation**: `src/services/hybrid-deployment.ts` - **Summary**: `docs/HYBRID_WORKFLOW_IMPROVEMENTS_SUMMARY.md` --- **Remember**: The hybrid workflow gives you the best of both worlds - the power of Helm customization with the safety and traceability of version-controlled configuration files!

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tsviz/arc-config-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server