Skip to main content

Gate API

The Gate resource provides dependency coordination by waiting for multiple conditions before proceeding.

Resource Definition​

apiVersion: konductor.io/v1
kind: Gate
metadata:
name: processing-gate
namespace: default
spec:
conditions:
- type: Job
name: data-validation
state: Complete
- type: Job
name: data-cleanup
state: Complete
- type: Barrier
name: extractors-done
state: Open
status:
phase: Closed
conditions:
- type: Ready
status: "True"
reason: GateReady
conditionsMet: 2
conditionsTotal: 3

Spec Fields​

FieldTypeRequiredDescription
conditions[]ConditionYesList of conditions that must be met
conditions[].typestringYesResource type: Job, Barrier, Lease, Gate
conditions[].namestringYesResource name to check
conditions[].statestringYesExpected state: Complete, Open, Available
conditions[].namespacestringNoResource namespace (defaults to gate namespace)

Status Fields​

FieldTypeDescription
phasestringCurrent phase: Open, Closed
conditionsMetintegerNumber of conditions currently met
conditionsTotalintegerTotal number of conditions

Phases​

  • Open: All conditions met, gate is open
  • Closed: One or more conditions not met, gate is closed

Examples​

Job Dependencies​

apiVersion: konductor.io/v1
kind: Gate
metadata:
name: processing-gate
spec:
conditions:
- type: Job
name: data-validation
state: Complete
- type: Job
name: data-cleanup
state: Complete
---
apiVersion: batch/v1
kind: Job
metadata:
name: data-processing
spec:
template:
spec:
initContainers:
- name: wait-gate
image: logiciq/koncli:latest
command: ["koncli", "gate", "wait", "processing-gate", "--timeout", "30m"]
containers:
- name: processor
image: my-processor:latest

Multi-Stage Pipeline​

apiVersion: konductor.io/v1
kind: Barrier
metadata:
name: extract-complete
spec:
expected: 10
---
apiVersion: konductor.io/v1
kind: Gate
metadata:
name: transform-gate
spec:
conditions:
- type: Barrier
name: extract-complete
state: Open
- type: Job
name: validation-job
state: Complete
---
apiVersion: batch/v1
kind: Job
metadata:
name: transform-job
spec:
template:
spec:
initContainers:
- name: wait-gate
image: logiciq/koncli:latest
command: ["koncli", "gate", "wait", "transform-gate"]
containers:
- name: transform
image: my-transform:latest

Complex Workflow​

apiVersion: konductor.io/v1
kind: Gate
metadata:
name: deployment-gate
spec:
conditions:
- type: Job
name: unit-tests
state: Complete
- type: Job
name: integration-tests
state: Complete
- type: Job
name: security-scan
state: Complete
- type: Gate
name: staging-gate
state: Open
---
apiVersion: batch/v1
kind: Job
metadata:
name: deploy-production
spec:
template:
spec:
initContainers:
- name: wait-gate
image: logiciq/koncli:latest
command: ["koncli", "gate", "wait", "deployment-gate", "--timeout", "1h"]
containers:
- name: deploy
image: my-deployer:latest

CLI Usage​

# Wait for gate to open
koncli gate wait processing-gate --timeout 30m

# Check gate status
koncli gate status processing-gate

# Create gate
koncli gate create processing-gate

# Delete gate
koncli gate delete processing-gate

Use Cases​

Job Dependencies​

Wait for prerequisite jobs before starting:

apiVersion: konductor.io/v1
kind: Gate
metadata:
name: job-deps
spec:
conditions:
- type: Job
name: prerequisite-1
state: Complete
- type: Job
name: prerequisite-2
state: Complete

Multi-Stage Pipelines​

Coordinate complex ETL workflows:

apiVersion: konductor.io/v1
kind: Gate
metadata:
name: transform-gate
spec:
conditions:
- type: Barrier
name: extract-complete
state: Open

Deployment Gates​

Ensure all checks pass before deployment:

apiVersion: konductor.io/v1
kind: Gate
metadata:
name: deploy-gate
spec:
conditions:
- type: Job
name: tests
state: Complete
- type: Job
name: security-scan
state: Complete

Cross-Namespace Dependencies​

Wait for resources in other namespaces:

apiVersion: konductor.io/v1
kind: Gate
metadata:
name: cross-ns-gate
spec:
conditions:
- type: Job
name: shared-job
namespace: shared-services
state: Complete

Best Practices​

  1. Set appropriate timeouts: Use --timeout to avoid indefinite waits
  2. Order conditions logically: List dependencies in execution order
  3. Use descriptive names: Make gate purpose clear
  4. Monitor gate status: Check conditions regularly
  5. Handle failures: Implement retry logic for transient failures

Troubleshooting​

Gate Not Opening​

# Check which conditions are not met
kubectl get gate my-gate -o yaml

# Check individual conditions
kubectl get job data-validation -o jsonpath='{.status.conditions}'
kubectl get barrier extractors-done -o jsonpath='{.status.phase}'

Timeout Waiting​

# Check gate status
koncli gate status my-gate

# Check conditions met
kubectl get gate my-gate -o jsonpath='{.status.conditionsMet}/{.status.conditionsTotal}'

# Describe gate for details
kubectl describe gate my-gate

Condition Never Met​

# Verify resource exists
kubectl get job prerequisite-job

# Check resource state
kubectl get job prerequisite-job -o jsonpath='{.status.conditions[?(@.type=="Complete")].status}'

# Check for errors
kubectl describe job prerequisite-job

Advanced Patterns​

Nested Gates​

Gates can depend on other gates:

apiVersion: konductor.io/v1
kind: Gate
metadata:
name: stage-1-gate
spec:
conditions:
- type: Job
name: job-1
state: Complete
---
apiVersion: konductor.io/v1
kind: Gate
metadata:
name: stage-2-gate
spec:
conditions:
- type: Gate
name: stage-1-gate
state: Open
- type: Job
name: job-2
state: Complete

Polling Pattern​

Wait for gate with custom polling:

#!/bin/bash
GATE="my-gate"
MAX_WAIT=1800 # 30 minutes

start_time=$(date +%s)
while true; do
if koncli gate status $GATE | grep -q "Open"; then
echo "Gate is open"
break
fi

elapsed=$(($(date +%s) - start_time))
if [ $elapsed -gt $MAX_WAIT ]; then
echo "Timeout waiting for gate"
exit 1
fi

echo "Waiting for gate... ($elapsed/$MAX_WAIT seconds)"
sleep 10
done

Conditional Execution​

Execute different paths based on gate:

#!/bin/bash
if koncli gate wait my-gate --timeout 5m; then
echo "Gate opened, proceeding with main workflow"
run-main-workflow
else
echo "Gate timeout, running fallback"
run-fallback-workflow
fi