Skip to content

Commit 8982c8d

Browse files
committed
Bump toolhive-operator-crds chart version
1 parent 60f052e commit 8982c8d

3 files changed

Lines changed: 3 additions & 171 deletions

File tree

deploy/charts/operator-crds/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ apiVersion: v2
22
name: toolhive-operator-crds
33
description: A Helm chart for installing the ToolHive Operator CRDs into Kubernetes.
44
type: application
5-
version: 0.0.99
5+
version: 0.0.100
66
appVersion: "0.0.1"
Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1 @@
1-
# ToolHive Operator CRDs Helm Chart
2-
3-
![Version: 0.0.99](https://img.shields.io/badge/Version-0.0.99-informational?style=flat-square)
4-
![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)
5-
6-
A Helm chart for installing the ToolHive Operator CRDs into Kubernetes.
7-
8-
---
9-
10-
ToolHive Operator CRDs
11-
12-
## TL;DR
13-
14-
```console
15-
helm upgrade -i toolhive-operator-crds oci://ghcr.io/stacklok/toolhive/toolhive-operator-crds
16-
```
17-
18-
## Prerequisites
19-
20-
- Kubernetes 1.25+
21-
- Helm 3.10+ minimum, 3.14+ recommended
22-
23-
## Usage
24-
25-
### Installing from the Chart
26-
27-
Install one of the available versions:
28-
29-
```shell
30-
helm upgrade -i <release_name> oci://ghcr.io/stacklok/toolhive/toolhive-operator-crds --version=<version>
31-
```
32-
33-
> **Tip**: List all releases using `helm list`
34-
35-
### Uninstalling the Chart
36-
37-
To uninstall/delete the `toolhive-operator-crds` deployment:
38-
39-
```console
40-
helm uninstall <release_name>
41-
```
42-
43-
## Why CRDs in templates/?
44-
45-
Helm does not upgrade CRDs placed in the `crds/` directory during `helm upgrade` operations. This is a [known Helm limitation](https://helm.sh/docs/chart_best_practices/custom_resource_definitions/#some-caveats-and-explanations) to prevent accidental data loss. As a result, users running `helm upgrade` would silently have stale CRDs.
46-
47-
To ensure CRDs are upgraded alongside the chart, this chart places CRDs in `templates/` with Helm conditionals. This follows the pattern used by several popular projects.
48-
49-
However, placing CRDs in `templates/` means they would be deleted when the Helm release is uninstalled, which could result in data loss. To prevent this, CRDs are annotated with `helm.sh/resource-policy: keep` by default (controlled by `crds.keep`). This ensures CRDs persist even after uninstalling the chart.
50-
51-
## Values
52-
53-
| Key | Type | Default | Description |
54-
|-----|-------------|------|---------|
55-
| crds | object | `{"install":{"registry":true,"server":true,"virtualMcp":true},"keep":true}` | CRD installation configuration |
56-
| crds.install | object | `{"registry":true,"server":true,"virtualMcp":true}` | Feature flags for CRD groups |
57-
| crds.install.registry | bool | `true` | Install Registry CRDs (mcpregistries) |
58-
| crds.install.server | bool | `true` | Install Server CRDs (mcpservers, mcpremoteproxies, mcptoolconfigs, mcpgroups) |
59-
| crds.install.virtualMcp | bool | `true` | Install VirtualMCP CRDs (virtualmcpservers, virtualmcpcompositetooldefinitions) |
60-
| crds.keep | bool | `true` | Whether to add the "helm.sh/resource-policy: keep" annotation to CRDs When true, CRDs will not be deleted when the Helm release is uninstalled |
61-
1+
\n

deploy/charts/operator/README.md

Lines changed: 1 addition & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -1,109 +1 @@
1-
# ToolHive Operator Helm Chart
2-
3-
![Version: 0.5.26](https://img.shields.io/badge/Version-0.5.26-informational?style=flat-square)
4-
![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square)
5-
6-
A Helm chart for deploying the ToolHive Operator into Kubernetes.
7-
8-
---
9-
10-
## TL;DR
11-
12-
```console
13-
helm upgrade -i toolhive-operator oci://ghcr.io/stacklok/toolhive/toolhive-operator -n toolhive-system --create-namespace
14-
```
15-
16-
Or for a custom values file:
17-
18-
```consoleCustom
19-
helm upgrade -i toolhive-operator oci://ghcr.io/stacklok/toolhive/toolhive-operator -n toolhive-system --create-namespace --values values-openshift.yaml
20-
```
21-
22-
## Prerequisites
23-
24-
- Kubernetes 1.25+
25-
- Helm 3.10+ minimum, 3.14+ recommended
26-
27-
## Usage
28-
29-
### Installing from the Chart
30-
31-
Install one of the available versions:
32-
33-
```shell
34-
helm upgrade -i <release_name> oci://ghcr.io/stacklok/toolhive/toolhive-operator --version=<version> -n toolhive-system --create-namespace
35-
```
36-
37-
> **Tip**: List all releases using `helm list`
38-
39-
### Uninstalling the Chart
40-
41-
To uninstall/delete the `toolhive-operator` deployment:
42-
43-
```console
44-
helm uninstall <release_name>
45-
```
46-
47-
The command removes all the Kubernetes components associated with the chart and deletes the release. You will have to delete the namespace manually if you used Helm to create it.
48-
49-
## Values
50-
51-
| Key | Type | Default | Description |
52-
|-----|-------------|------|---------|
53-
| fullnameOverride | string | `"toolhive-operator"` | Provide a fully-qualified name override for resources |
54-
| nameOverride | string | `""` | Override the name of the chart |
55-
| 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,"registry":true,"server":true,"virtualMCP":true},"gc":{"gogc":75,"gomeglimit":"150MiB"},"image":"ghcr.io/stacklok/toolhive/operator:v0.7.2","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.7.2","vmcpImage":"ghcr.io/stacklok/toolhive/vmcp:v0.7.2","volumeMounts":[],"volumes":[]}` | All values for the operator deployment and associated resources |
56-
| operator.affinity | object | `{}` | Affinity settings for the operator pod |
57-
| operator.autoscaling | object | `{"enabled":false,"maxReplicas":100,"minReplicas":1,"targetCPUUtilizationPercentage":80}` | Configuration for horizontal pod autoscaling |
58-
| operator.autoscaling.enabled | bool | `false` | Enable autoscaling for the operator |
59-
| operator.autoscaling.maxReplicas | int | `100` | Maximum number of replicas |
60-
| operator.autoscaling.minReplicas | int | `1` | Minimum number of replicas |
61-
| operator.autoscaling.targetCPUUtilizationPercentage | int | `80` | Target CPU utilization percentage for autoscaling |
62-
| operator.containerSecurityContext | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsNonRoot":true,"runAsUser":1000,"seccompProfile":{"type":"RuntimeDefault"}}` | Container security context settings for the operator |
63-
| operator.env | object | `{}` | Environment variables to set in the operator container |
64-
| operator.features.experimental | bool | `false` | Enable experimental features |
65-
| operator.features.registry | bool | `true` | Enable registry controller (MCPRegistry). This automatically sets ENABLE_REGISTRY environment variable. |
66-
| operator.features.server | bool | `true` | Enable server-related controllers (MCPServer, MCPExternalAuthConfig, MCPRemoteProxy, and ToolConfig). This automatically sets ENABLE_SERVER environment variable. |
67-
| operator.features.virtualMCP | bool | `true` | Enable Virtual MCP aggregation features (VirtualMCPServer, MCPGroup controllers and webhooks). Set to false to disable Virtual MCP controllers when Virtual MCP CRDs are not installed. This automatically sets ENABLE_VMCP environment variable. Requires server to be enabled (server: true). |
68-
| operator.gc | object | `{"gogc":75,"gomeglimit":"150MiB"}` | Go memory limits and garbage collection percentage for the operator container |
69-
| operator.gc.gogc | int | `75` | Go garbage collection percentage for the operator container |
70-
| operator.gc.gomeglimit | string | `"150MiB"` | Go memory limits for the operator container |
71-
| operator.image | string | `"ghcr.io/stacklok/toolhive/operator:v0.7.2"` | Container image for the operator |
72-
| operator.imagePullPolicy | string | `"IfNotPresent"` | Image pull policy for the operator container |
73-
| operator.imagePullSecrets | list | `[]` | List of image pull secrets to use |
74-
| operator.leaderElectionRole | object | `{"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"]}]}` | Leader election role configuration |
75-
| operator.leaderElectionRole.binding.name | string | `"toolhive-operator-leader-election-rolebinding"` | Name of the role binding for leader election |
76-
| operator.leaderElectionRole.name | string | `"toolhive-operator-leader-election-role"` | Name of the role for leader election |
77-
| operator.leaderElectionRole.rules | list | `[{"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"]}]` | Rules for the leader election role |
78-
| operator.livenessProbe | object | `{"httpGet":{"path":"/healthz","port":"health"},"initialDelaySeconds":15,"periodSeconds":20}` | Liveness probe configuration for the operator |
79-
| operator.nodeSelector | object | `{}` | Node selector for the operator pod |
80-
| operator.podAnnotations | object | `{}` | Annotations to add to the operator pod |
81-
| operator.podLabels | object | `{}` | Labels to add to the operator pod |
82-
| operator.podSecurityContext | object | `{"runAsNonRoot":true}` | Pod security context settings |
83-
| operator.ports | list | `[{"containerPort":8080,"name":"metrics","protocol":"TCP"},{"containerPort":8081,"name":"health","protocol":"TCP"}]` | List of ports to expose from the operator container |
84-
| operator.proxyHost | string | `"0.0.0.0"` | Host for the proxy deployed by the operator |
85-
| operator.rbac | object | `{"allowedNamespaces":[],"scope":"cluster"}` | RBAC configuration for the operator |
86-
| operator.rbac.allowedNamespaces | list | `[]` | List of namespaces that the operator is allowed to have permissions to manage. Only used if scope is set to "namespace". |
87-
| operator.rbac.scope | string | `"cluster"` | Scope of the RBAC configuration. - cluster: The operator will have cluster-wide permissions via ClusterRole and ClusterRoleBinding. - namespace: The operator will have permissions to manage resources in the namespaces specified in `allowedNamespaces`. The operator will have a ClusterRole and RoleBinding for each namespace in `allowedNamespaces`. |
88-
| operator.readinessProbe | object | `{"httpGet":{"path":"/readyz","port":"health"},"initialDelaySeconds":5,"periodSeconds":10}` | Readiness probe configuration for the operator |
89-
| operator.replicaCount | int | `1` | Number of replicas for the operator deployment |
90-
| operator.resources | object | `{"limits":{"cpu":"500m","memory":"128Mi"},"requests":{"cpu":"10m","memory":"64Mi"}}` | Resource requests and limits for the operator container |
91-
| operator.serviceAccount | object | `{"annotations":{},"automountServiceAccountToken":true,"create":true,"labels":{},"name":"toolhive-operator"}` | Service account configuration for the operator |
92-
| operator.serviceAccount.annotations | object | `{}` | Annotations to add to the service account |
93-
| operator.serviceAccount.automountServiceAccountToken | bool | `true` | Automatically mount a ServiceAccount's API credentials |
94-
| operator.serviceAccount.create | bool | `true` | Specifies whether a service account should be created |
95-
| operator.serviceAccount.labels | object | `{}` | Labels to add to the service account |
96-
| 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. |
97-
| operator.tolerations | list | `[]` | Tolerations for the operator pod |
98-
| operator.toolhiveRunnerImage | string | `"ghcr.io/stacklok/toolhive/proxyrunner:v0.7.2"` | Image to use for Toolhive runners |
99-
| operator.vmcpImage | string | `"ghcr.io/stacklok/toolhive/vmcp:v0.7.2"` | Image to use for Virtual MCP Server (vMCP) deployments |
100-
| operator.volumeMounts | list | `[]` | Additional volume mounts on the operator container |
101-
| operator.volumes | list | `[]` | Additional volumes to mount on the operator pod |
102-
| registryAPI | object | `{"image":"ghcr.io/stacklok/thv-registry-api:v0.4.8","serviceAccount":{"annotations":{},"automountServiceAccountToken":true,"labels":{},"name":"toolhive-registry-api"}}` | All values for the registry API deployment and associated resources |
103-
| registryAPI.image | string | `"ghcr.io/stacklok/thv-registry-api:v0.4.8"` | Container image for the registry API |
104-
| registryAPI.serviceAccount | object | `{"annotations":{},"automountServiceAccountToken":true,"labels":{},"name":"toolhive-registry-api"}` | Service account configuration for the registry API |
105-
| registryAPI.serviceAccount.annotations | object | `{}` | Annotations to add to the registry API service account |
106-
| registryAPI.serviceAccount.automountServiceAccountToken | bool | `true` | Automatically mount a ServiceAccount's API credentials |
107-
| registryAPI.serviceAccount.labels | object | `{}` | Labels to add to the registry API service account |
108-
| registryAPI.serviceAccount.name | string | `"toolhive-registry-api"` | The name of the service account to use for the registry API |
109-
1+
\n

0 commit comments

Comments
 (0)