Skip to main content

Kind Development Commands Reference

Quick reference for common development tasks in the Kind cluster.

For standalone GUI deployment in local kind with direct NoETL API mode (no gateway), see:

Hot-Reload Python Code

Initial Setup (One-time)

# Create ConfigMap with the Python file
kubectl create configmap noetl-v2-patch -n noetl \
--from-file=v2.py=noetl/server/api/v2.py

# Patch noetl-server deployment
kubectl patch deployment noetl-server -n noetl --type='json' -p='[
{"op": "add", "path": "/spec/template/spec/volumes/-", "value": {"name": "v2-patch", "configMap": {"name": "noetl-v2-patch"}}},
{"op": "add", "path": "/spec/template/spec/containers/0/volumeMounts/-", "value": {"name": "v2-patch", "mountPath": "/opt/noetl/noetl/server/api/v2.py", "subPath": "v2.py"}}
]'

# Patch noetl-worker deployment
kubectl patch deployment noetl-worker -n noetl --type='json' -p='[
{"op": "add", "path": "/spec/template/spec/volumes/-", "value": {"name": "v2-patch", "configMap": {"name": "noetl-v2-patch"}}},
{"op": "add", "path": "/spec/template/spec/containers/0/volumeMounts/-", "value": {"name": "v2-patch", "mountPath": "/opt/noetl/noetl/server/api/v2.py", "subPath": "v2.py"}}
]'

Apply Code Changes

# Update ConfigMap
kubectl create configmap noetl-v2-patch -n noetl \
--from-file=v2.py=noetl/server/api/v2.py \
--dry-run=client -o yaml | kubectl apply -f -

# Restart deployments
kubectl rollout restart deployment/noetl-server deployment/noetl-worker -n noetl
kubectl rollout status deployment/noetl-server deployment/noetl-worker -n noetl

Update Gateway UI

kubectl create configmap gateway-ui-files -n gateway \
--from-file=tests/fixtures/gateway_ui/index.html \
--from-file=tests/fixtures/gateway_ui/login.html \
--from-file=tests/fixtures/gateway_ui/styles.css \
--from-file=tests/fixtures/gateway_ui/app.js \
--from-file=tests/fixtures/gateway_ui/auth.js \
--from-file=tests/fixtures/gateway_ui/env.js \
--dry-run=client -o yaml | kubectl apply -f -

kubectl rollout restart deployment/gateway-ui -n gateway

Update Gateway (Rust)

podman build -t noetl/gateway:dev -f crates/gateway/Dockerfile .
kind load docker-image noetl/gateway:dev --name noetl
kubectl rollout restart deployment/gateway -n gateway

Register Playbook

python3 << 'EOF'
import json
with open('tests/fixtures/playbooks/api_integration/amadeus_ai_api/amadeus_ai_api.yaml', 'r') as f:
content = f.read()
payload = {"path": "api_integration/amadeus_ai_api", "kind": "Playbook", "content": content}
with open('/tmp/playbook.json', 'w') as f:
json.dump(payload, f)
EOF

curl -X POST http://localhost:8082/api/catalog/register \
-H "Content-Type: application/json" \
-d @/tmp/playbook.json

Debugging

# Pod status
kubectl get pods -n noetl
kubectl get pods -n gateway

# Logs
kubectl logs -n noetl -l app=noetl-server --tail=100
kubectl logs -n noetl -l app=noetl-worker --tail=100
kubectl logs -n gateway -l app=gateway --tail=100

# Query execution events
kubectl exec -n postgres deploy/postgres -- psql -U noetl -d noetl -c "
SELECT event_type, node_name, status, created_at
FROM noetl.event
WHERE execution_id = <EXECUTION_ID>
ORDER BY created_at DESC
LIMIT 20
"

# Verify ConfigMap
kubectl get configmap noetl-v2-patch -n noetl -o jsonpath='{.data.v2\.py}' | head -50

# Check mounted file
kubectl exec -n noetl deploy/noetl-server -- head -50 /opt/noetl/noetl/server/api/v2.py