Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/workflows/test-e2e-lifecycle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,7 @@ jobs:
helm upgrade --install toolhive-operator deploy/charts/operator \
--set operator.image=${OPERATOR_IMAGE} \
--set operator.toolhiveRunnerImage=${TOOLHIVE_IMAGE} \
--set-string 'operator.env[0].name=VMCP_IMAGE' \
--set-string "operator.env[0].value=${{ env.VMCP_IMAGE }}" \
--set operator.vmcpImage=${{ env.VMCP_IMAGE }} \
--namespace toolhive-system \
--create-namespace \
--kubeconfig kconfig.yaml
Expand Down
5 changes: 5 additions & 0 deletions cmd/thv-operator/Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,15 +142,20 @@ tasks:
sh: KO_DOCKER_REPO=kind.local ko build --local -B ./cmd/thv-operator | tail -n 1
TOOLHIVE_IMAGE:
sh: KO_DOCKER_REPO=kind.local ko build --local -B ./cmd/thv-proxyrunner | tail -n 1
VMCP_IMAGE:
sh: KO_DOCKER_REPO=kind.local ko build --local -B ./cmd/vmcp | tail -n 1
cmds:
- echo "Loading toolhive operator image {{.OPERATOR_IMAGE}} into kind..."
- kind load docker-image --name toolhive {{.OPERATOR_IMAGE}}
- echo "Loading toolhive image {{.TOOLHIVE_IMAGE}} into kind..."
- kind load docker-image --name toolhive {{.TOOLHIVE_IMAGE}}
- echo "Loading vmcp image {{.VMCP_IMAGE}} into kind..."
- kind load docker-image --name toolhive {{.VMCP_IMAGE}}
- |
helm upgrade --install toolhive-operator deploy/charts/operator \
--set operator.image={{.OPERATOR_IMAGE}} \
--set operator.toolhiveRunnerImage={{.TOOLHIVE_IMAGE}} \
--set operator.vmcpImage={{.VMCP_IMAGE}} \
--set operator.features.experimental={{.ENABLE_EXPERIMENTAL_FEATURES}} \
--set registryAPI.image={{.REGISTRY_API_IMAGE}} \
--namespace toolhive-system \
Expand Down
3 changes: 2 additions & 1 deletion deploy/charts/operator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ The command removes all the Kubernetes components associated with the chart and
|-----|-------------|------|---------|
| fullnameOverride | string | `"toolhive-operator"` | Provide a fully-qualified name override for resources |
| nameOverride | string | `""` | Override the name of the chart |
| operator | object | `{"affinity":{},"autoscaling":{"enabled":false,"maxReplicas":100,"minReplicas":1,"targetCPUUtilizationPercentage":80},"containerSecurityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"runAsUser":1000,"seccompProfile":{"type":"RuntimeDefault"}},"env":{},"features":{"experimental":false},"gc":{"gogc":75,"gomeglimit":"150MiB"},"image":"ghcr.io/stacklok/toolhive/operator:v0.6.9","imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"leaderElectionRole":{"binding":{"name":"toolhive-operator-leader-election-rolebinding"},"name":"toolhive-operator-leader-election-role","rules":[{"apiGroups":[""],"resources":["configmaps"],"verbs":["get","list","watch","create","update","patch","delete"]},{"apiGroups":["coordination.k8s.io"],"resources":["leases"],"verbs":["get","list","watch","create","update","patch","delete"]},{"apiGroups":[""],"resources":["events"],"verbs":["create","patch"]}]},"livenessProbe":{"httpGet":{"path":"/healthz","port":"health"},"initialDelaySeconds":15,"periodSeconds":20},"nodeSelector":{},"podAnnotations":{},"podLabels":{},"podSecurityContext":{"runAsNonRoot":true},"ports":[{"containerPort":8080,"name":"metrics","protocol":"TCP"},{"containerPort":8081,"name":"health","protocol":"TCP"}],"proxyHost":"0.0.0.0","rbac":{"allowedNamespaces":[],"scope":"cluster"},"readinessProbe":{"httpGet":{"path":"/readyz","port":"health"},"initialDelaySeconds":5,"periodSeconds":10},"replicaCount":1,"resources":{"limits":{"cpu":"500m","memory":"128Mi"},"requests":{"cpu":"10m","memory":"64Mi"}},"serviceAccount":{"annotations":{},"automountServiceAccountToken":true,"create":true,"labels":{},"name":"toolhive-operator"},"tolerations":[],"toolhiveRunnerImage":"ghcr.io/stacklok/toolhive/proxyrunner:v0.6.9","volumeMounts":[],"volumes":[]}` | All values for the operator deployment and associated resources |
| operator | object | `{"affinity":{},"autoscaling":{"enabled":false,"maxReplicas":100,"minReplicas":1,"targetCPUUtilizationPercentage":80},"containerSecurityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"runAsUser":1000,"seccompProfile":{"type":"RuntimeDefault"}},"env":{},"features":{"experimental":false},"gc":{"gogc":75,"gomeglimit":"150MiB"},"image":"ghcr.io/stacklok/toolhive/operator:v0.6.9","imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"leaderElectionRole":{"binding":{"name":"toolhive-operator-leader-election-rolebinding"},"name":"toolhive-operator-leader-election-role","rules":[{"apiGroups":[""],"resources":["configmaps"],"verbs":["get","list","watch","create","update","patch","delete"]},{"apiGroups":["coordination.k8s.io"],"resources":["leases"],"verbs":["get","list","watch","create","update","patch","delete"]},{"apiGroups":[""],"resources":["events"],"verbs":["create","patch"]}]},"livenessProbe":{"httpGet":{"path":"/healthz","port":"health"},"initialDelaySeconds":15,"periodSeconds":20},"nodeSelector":{},"podAnnotations":{},"podLabels":{},"podSecurityContext":{"runAsNonRoot":true},"ports":[{"containerPort":8080,"name":"metrics","protocol":"TCP"},{"containerPort":8081,"name":"health","protocol":"TCP"}],"proxyHost":"0.0.0.0","rbac":{"allowedNamespaces":[],"scope":"cluster"},"readinessProbe":{"httpGet":{"path":"/readyz","port":"health"},"initialDelaySeconds":5,"periodSeconds":10},"replicaCount":1,"resources":{"limits":{"cpu":"500m","memory":"128Mi"},"requests":{"cpu":"10m","memory":"64Mi"}},"serviceAccount":{"annotations":{},"automountServiceAccountToken":true,"create":true,"labels":{},"name":"toolhive-operator"},"tolerations":[],"toolhiveRunnerImage":"ghcr.io/stacklok/toolhive/proxyrunner:v0.6.9","vmcpImage":"ghcr.io/stacklok/toolhive/vmcp:v0.6.9","volumeMounts":[],"volumes":[]}` | All values for the operator deployment and associated resources |
| operator.affinity | object | `{}` | Affinity settings for the operator pod |
| operator.autoscaling | object | `{"enabled":false,"maxReplicas":100,"minReplicas":1,"targetCPUUtilizationPercentage":80}` | Configuration for horizontal pod autoscaling |
| operator.autoscaling.enabled | bool | `false` | Enable autoscaling for the operator |
Expand Down Expand Up @@ -92,6 +92,7 @@ The command removes all the Kubernetes components associated with the chart and
| operator.serviceAccount.name | string | `"toolhive-operator"` | The name of the service account to use. If not set and create is true, a name is generated. |
| operator.tolerations | list | `[]` | Tolerations for the operator pod |
| operator.toolhiveRunnerImage | string | `"ghcr.io/stacklok/toolhive/proxyrunner:v0.6.9"` | Image to use for Toolhive runners |
| operator.vmcpImage | string | `"ghcr.io/stacklok/toolhive/vmcp:v0.6.9"` | Image to use for Virtual MCP Server (vMCP) deployments |
| operator.volumeMounts | list | `[]` | Additional volume mounts on the operator container |
| operator.volumes | list | `[]` | Additional volumes to mount on the operator pod |
| registryAPI | object | `{"image":"ghcr.io/stacklok/thv-registry-api:v0.3.1","serviceAccount":{"annotations":{},"automountServiceAccountToken":true,"labels":{},"name":"toolhive-registry-api"}}` | All values for the registry API deployment and associated resources |
Expand Down
2 changes: 2 additions & 0 deletions deploy/charts/operator/templates/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ spec:
{{- end }}
- name: TOOLHIVE_RUNNER_IMAGE
value: "{{ .Values.operator.toolhiveRunnerImage }}"
- name: VMCP_IMAGE
value: "{{ .Values.operator.vmcpImage }}"
- name: TOOLHIVE_PROXY_HOST
value: "{{ .Values.operator.proxyHost }}"
- name: TOOLHIVE_REGISTRY_API_IMAGE
Expand Down
3 changes: 3 additions & 0 deletions deploy/charts/operator/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ operator:
# -- Image to use for Toolhive runners
toolhiveRunnerImage: ghcr.io/stacklok/toolhive/proxyrunner:v0.6.9

# -- Image to use for Virtual MCP Server (vMCP) deployments
vmcpImage: ghcr.io/stacklok/toolhive/vmcp:v0.6.9

# -- Host for the proxy deployed by the operator
proxyHost: 0.0.0.0

Expand Down
Loading