Skip to content

Commit 0fc85f4

Browse files
authored
Allow setting environment for the proxy server through the operator (#983)
1 parent 3f86462 commit 0fc85f4

File tree

8 files changed

+447
-14
lines changed

8 files changed

+447
-14
lines changed

cmd/thv-operator/api/v1alpha1/mcpserver_types.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,24 @@ type MCPServerSpec struct {
7676
type ResourceOverrides struct {
7777
// ProxyDeployment defines overrides for the Proxy Deployment resource (toolhive proxy)
7878
// +optional
79-
ProxyDeployment *ResourceMetadataOverrides `json:"proxyDeployment,omitempty"`
79+
ProxyDeployment *ProxyDeploymentOverrides `json:"proxyDeployment,omitempty"`
8080

8181
// ProxyService defines overrides for the Proxy Service resource (points to the proxy deployment)
8282
// +optional
8383
ProxyService *ResourceMetadataOverrides `json:"proxyService,omitempty"`
8484
}
8585

86+
// ProxyDeploymentOverrides defines overrides specific to the proxy deployment
87+
type ProxyDeploymentOverrides struct {
88+
// ResourceMetadataOverrides is embedded to inherit annotations and labels fields
89+
ResourceMetadataOverrides `json:",inline"` // nolint:revive
90+
91+
// Env are environment variables to set in the proxy container (thv run process)
92+
// These affect the toolhive proxy itself, not the MCP server it manages
93+
// +optional
94+
Env []EnvVar `json:"env,omitempty"`
95+
}
96+
8697
// ResourceMetadataOverrides defines metadata overrides for a resource
8798
type ResourceMetadataOverrides struct {
8899
// Annotations to add or override on the resource

cmd/thv-operator/api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 22 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/thv-operator/controllers/mcpserver_controller.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,16 @@ func (r *MCPServerReconciler) deploymentForMCPServer(m *mcpv1alpha1.MCPServer) *
452452
// Prepare container env vars for the proxy container
453453
env := []corev1.EnvVar{}
454454

455+
// Add user-specified proxy environment variables from ResourceOverrides
456+
if m.Spec.ResourceOverrides != nil && m.Spec.ResourceOverrides.ProxyDeployment != nil {
457+
for _, envVar := range m.Spec.ResourceOverrides.ProxyDeployment.Env {
458+
env = append(env, corev1.EnvVar{
459+
Name: envVar.Name,
460+
Value: envVar.Value,
461+
})
462+
}
463+
}
464+
455465
// Prepare container volume mounts
456466
volumeMounts := []corev1.VolumeMount{}
457467
volumes := []corev1.Volume{}
@@ -837,6 +847,20 @@ func deploymentNeedsUpdate(deployment *appsv1.Deployment, mcpServer *mcpv1alpha1
837847
}
838848
}
839849

850+
// Check if the proxy environment variables have changed
851+
expectedProxyEnv := []corev1.EnvVar{}
852+
if mcpServer.Spec.ResourceOverrides != nil && mcpServer.Spec.ResourceOverrides.ProxyDeployment != nil {
853+
for _, envVar := range mcpServer.Spec.ResourceOverrides.ProxyDeployment.Env {
854+
expectedProxyEnv = append(expectedProxyEnv, corev1.EnvVar{
855+
Name: envVar.Name,
856+
Value: envVar.Value,
857+
})
858+
}
859+
}
860+
if !reflect.DeepEqual(container.Env, expectedProxyEnv) {
861+
return true
862+
}
863+
840864
// Check if the pod template spec has changed (including secrets)
841865
expectedPodTemplateSpec := generateAndMergePodTemplateSpecs(mcpServer.Spec.Secrets, mcpServer.Spec.PodTemplateSpec)
842866

0 commit comments

Comments
 (0)