Skip to content

Commit 93cf12d

Browse files
committed
fix(operator): resolve PR #69 review findings
1 parent 86bc685 commit 93cf12d

2 files changed

Lines changed: 26 additions & 12 deletions

File tree

internal/operator/controller.go

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,9 @@ func (r *MCPServerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
119119
return ctrl.Result{Requeue: true}, nil
120120
}
121121

122+
if err := r.validateMCPServerSpec(ctx, mcpServer, logger); err != nil {
123+
return ctrl.Result{Requeue: false}, err
124+
}
122125
if err := r.validateIngressConfig(ctx, mcpServer, logger); err != nil {
123126
return ctrl.Result{Requeue: false}, err
124127
}
@@ -172,22 +175,30 @@ func (r *MCPServerReconciler) applyDefaultsIfNeeded(ctx context.Context, mcpServ
172175
return true, nil
173176
}
174177

175-
func (r *MCPServerReconciler) validateIngressConfig(ctx context.Context, mcpServer *mcpv1alpha1.MCPServer, logger logr.Logger) error {
178+
func (r *MCPServerReconciler) validateMCPServerSpec(ctx context.Context, mcpServer *mcpv1alpha1.MCPServer, logger logr.Logger) error {
176179
if _, err := mcpServer.ValidateCreate(); err != nil {
177180
r.updateStatus(ctx, mcpServer, "Error", err.Error(), resourceReadiness{})
178-
logOperatorError(logger, err, "Invalid ingress configuration")
181+
logOperatorError(logger, err, "Invalid MCPServer specification")
179182
return err
180183
}
181184
return nil
182185
}
183186

184-
func (r *MCPServerReconciler) validateGatewayConfig(ctx context.Context, mcpServer *mcpv1alpha1.MCPServer, logger logr.Logger) error {
185-
if _, err := mcpServer.ValidateCreate(); err != nil {
186-
r.updateStatus(ctx, mcpServer, "Error", err.Error(), resourceReadiness{})
187-
logOperatorError(logger, err, "Invalid gateway configuration")
188-
return err
187+
func (r *MCPServerReconciler) validateIngressConfig(ctx context.Context, mcpServer *mcpv1alpha1.MCPServer, logger logr.Logger) error {
188+
if strings.TrimSpace(mcpServer.Spec.PublicPathPrefix) == "" {
189+
if err := r.requireSpecField(ctx, mcpServer, logger, "ingress path", effectiveIngressPath(mcpServer),
190+
"ingressPath is required; set spec.ingressPath or ensure metadata.name is set"); err != nil {
191+
return err
192+
}
193+
if err := r.requireSpecField(ctx, mcpServer, logger, "ingress host", effectiveIngressHost(mcpServer),
194+
"ingressHost is required; set spec.ingressHost, set MCP_DEFAULT_INGRESS_HOST on the operator, or use spec.publicPathPrefix for hostless routing"); err != nil {
195+
return err
196+
}
189197
}
198+
return nil
199+
}
190200

201+
func (r *MCPServerReconciler) validateGatewayConfig(ctx context.Context, mcpServer *mcpv1alpha1.MCPServer, logger logr.Logger) error {
191202
if gatewayEnabled(mcpServer) {
192203
if _, err := r.resolveGatewayImage(mcpServer); err != nil {
193204
r.updateStatus(ctx, mcpServer, "Error", err.Error(), resourceReadiness{})
@@ -314,9 +325,12 @@ func determinePhase(readiness resourceReadiness) (string, bool) {
314325
}
315326

316327
func (r *MCPServerReconciler) setDefaults(mcpServer *mcpv1alpha1.MCPServer) {
328+
ingressHostUnset := strings.TrimSpace(mcpServer.Spec.IngressHost) == ""
329+
publicPathPrefixUnset := strings.TrimSpace(mcpServer.Spec.PublicPathPrefix) == ""
330+
317331
mcpServer.Default()
318332

319-
if strings.TrimSpace(mcpServer.Spec.IngressHost) == "" && strings.TrimSpace(mcpServer.Spec.PublicPathPrefix) == "" {
333+
if ingressHostUnset && publicPathPrefixUnset {
320334
mcpServer.Spec.IngressHost = strings.TrimSpace(r.DefaultIngressHost)
321335
}
322336

internal/operator/controller_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func TestBuildGatewayContainerAppliesDefaultResources(t *testing.T) {
157157
}
158158
}
159159

160-
func TestValidateGatewayConfigRejectsInvalidRolloutValues(t *testing.T) {
160+
func TestValidateMCPServerSpecRejectsInvalidRolloutValues(t *testing.T) {
161161
scheme := runtime.NewScheme()
162162
if err := mcpv1alpha1.AddToScheme(scheme); err != nil {
163163
t.Fatalf("AddToScheme() error = %v", err)
@@ -195,7 +195,7 @@ func TestValidateGatewayConfigRejectsInvalidRolloutValues(t *testing.T) {
195195
Scheme: scheme,
196196
}
197197

198-
err := reconciler.validateGatewayConfig(context.Background(), server, logr.Discard())
198+
err := reconciler.validateMCPServerSpec(context.Background(), server, logr.Discard())
199199
if err == nil {
200200
t.Fatal("expected rollout validation error")
201201
}
@@ -204,7 +204,7 @@ func TestValidateGatewayConfigRejectsInvalidRolloutValues(t *testing.T) {
204204
}
205205
}
206206

207-
func TestValidateGatewayConfigRequiresOAuthIssuer(t *testing.T) {
207+
func TestValidateMCPServerSpecRequiresOAuthIssuer(t *testing.T) {
208208
scheme := runtime.NewScheme()
209209
if err := mcpv1alpha1.AddToScheme(scheme); err != nil {
210210
t.Fatalf("AddToScheme() error = %v", err)
@@ -240,7 +240,7 @@ func TestValidateGatewayConfigRequiresOAuthIssuer(t *testing.T) {
240240
Scheme: scheme,
241241
}
242242

243-
err := reconciler.validateGatewayConfig(context.Background(), server, logr.Discard())
243+
err := reconciler.validateMCPServerSpec(context.Background(), server, logr.Discard())
244244
if err == nil {
245245
t.Fatal("expected oauth issuer validation error")
246246
}

0 commit comments

Comments
 (0)