memory-bank/components/service-waiter.md
The Service-Waiter component in Gitpod is a utility service that waits for other services to become available before proceeding. It's designed to be used in initialization and deployment scenarios where services have dependencies on other services being ready. The component can wait for different types of services, including databases, Redis instances, and Kubernetes components, ensuring that a service doesn't start until its dependencies are fully operational.
The primary purposes of the Service-Waiter component are:
The Service-Waiter component is structured as a command-line tool with several subcommands for different types of services:
The component is designed to be run as a Kubernetes init container or as part of a deployment script, blocking until the target service is ready or a timeout is reached.
The database waiter:
The Redis waiter:
The component waiter:
The Service-Waiter component can be configured through command-line flags or environment variables:
--timeout, -t: Maximum time to wait (default: 5m or SERVICE_WAITER_TIMEOUT env var)--verbose, -v: Enable verbose logging--json-log, -j: Produce JSON log output--host, -H: Database host (from DB_HOST env var)--port, -p: Database port (from DB_PORT env var, default: 3306)--username, -u: Database username (from DB_USERNAME env var, default: gitpod)--password, -P: Database password (from DB_PASSWORD env var)--caCert: Custom CA certificate (from DB_CA_CERT env var)--migration-check: Enable checking if the latest migration has been applied--host, -H: Redis host (default: redis)--port, -p: Redis port (default: 6379)--image: The latest image of current installer build--namespace: The namespace of deployment--component: Component name of deployment--labels: Labels of deploymentservice-waiter database --host mysql.example.com --port 3306 --username gitpod --password secret
service-waiter redis --host redis.example.com --port 6379
service-waiter component --namespace default --component server --labels "app=gitpod,component=server" --image gitpod/server:latest
initContainers:
- name: wait-for-db
image: gitpod/service-waiter:latest
command: ["service-waiter", "database"]
env:
- name: DB_HOST
value: mysql
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secrets
key: password
The Service-Waiter component integrates with:
components/common-go: Common Go utilitiescomponents/gitpod-db: For database migration informationThe component implements several security measures: