Skip to content

Commit 2783275

Browse files
committed
fix controller deployment
1 parent cbbdbf8 commit 2783275

File tree

14 files changed

+2262
-130
lines changed

14 files changed

+2262
-130
lines changed

cmd/thv-operator/controllers/virtualmcpserver_deployment.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ func (r *VirtualMCPServerReconciler) deploymentForVirtualMCPServer(
131131
func (*VirtualMCPServerReconciler) buildContainerArgsForVmcp() []string {
132132
return []string{
133133
"serve",
134-
"--config=/etc/vmcp-config/config.json",
134+
"--config=/etc/vmcp-config/config.yaml",
135135
}
136136
}
137137

cmd/thv-operator/controllers/virtualmcpserver_vmcpconfig.go

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func (r *VirtualMCPServerReconciler) ensureVmcpConfigConfigMap(
4646
Labels: labelsForVmcpConfig(vmcp.Name),
4747
},
4848
Data: map[string]string{
49-
"config.json": string(vmcpConfigJSON),
49+
"config.yaml": string(vmcpConfigJSON), // Using .yaml extension - yaml.v3 can parse JSON
5050
},
5151
}
5252

@@ -163,19 +163,39 @@ func (*VirtualMCPServerReconciler) convertIncomingAuth(
163163
) *vmcpconfig.IncomingAuthConfig {
164164
incoming := &vmcpconfig.IncomingAuthConfig{}
165165

166-
// TODO: Implement proper conversion from OIDCConfigRef to OIDCConfig
167-
// The OIDCConfigRef structure is more complex and needs to resolve references
166+
// Convert OIDC configuration
168167
if vmcp.Spec.IncomingAuth.OIDCConfig != nil {
169168
incoming.Type = "oidc"
170-
// Placeholder - will need to resolve actual OIDC config from references
171-
incoming.OIDC = &vmcpconfig.OIDCConfig{}
169+
170+
// Handle inline OIDC configuration
171+
if vmcp.Spec.IncomingAuth.OIDCConfig.Type == "inline" && vmcp.Spec.IncomingAuth.OIDCConfig.Inline != nil {
172+
inline := vmcp.Spec.IncomingAuth.OIDCConfig.Inline
173+
incoming.OIDC = &vmcpconfig.OIDCConfig{
174+
Issuer: inline.Issuer,
175+
ClientID: inline.ClientID, // Note: API uses clientId (camelCase) but config uses ClientID
176+
ClientSecret: inline.ClientSecret,
177+
Audience: inline.Audience,
178+
Resource: vmcp.Spec.IncomingAuth.OIDCConfig.ResourceURL,
179+
Scopes: nil, // TODO: Add scopes if needed
180+
}
181+
} else {
182+
// TODO: Handle configMap and kubernetes types
183+
// For now, create empty config to avoid nil pointer
184+
incoming.OIDC = &vmcpconfig.OIDCConfig{}
185+
}
172186
}
173187

188+
// Convert authorization configuration
174189
if vmcp.Spec.IncomingAuth.AuthzConfig != nil {
175190
incoming.Authz = &vmcpconfig.AuthzConfig{
176191
Type: vmcp.Spec.IncomingAuth.AuthzConfig.Type,
177-
// TODO: Load policies from ConfigMap if referenced
178192
}
193+
194+
// Handle inline policies
195+
if vmcp.Spec.IncomingAuth.AuthzConfig.Type == "inline" && vmcp.Spec.IncomingAuth.AuthzConfig.Inline != nil {
196+
incoming.Authz.Policies = vmcp.Spec.IncomingAuth.AuthzConfig.Inline.Policies
197+
}
198+
// TODO: Load policies from ConfigMap if Type is "configMap"
179199
}
180200

181201
return incoming
@@ -259,6 +279,11 @@ func (*VirtualMCPServerReconciler) convertAggregation(
259279
PrefixFormat: vmcp.Spec.Aggregation.ConflictResolutionConfig.PrefixFormat,
260280
PriorityOrder: vmcp.Spec.Aggregation.ConflictResolutionConfig.PriorityOrder,
261281
}
282+
} else if agg.ConflictResolution == "prefix" {
283+
// Provide default prefix format if using prefix strategy without explicit config
284+
agg.ConflictResolutionConfig = &vmcpconfig.ConflictResolutionConfig{
285+
PrefixFormat: "{workload}_",
286+
}
262287
}
263288

264289
// Convert per-workload tool configs
@@ -306,7 +331,7 @@ func (*VirtualMCPServerReconciler) convertCompositeTools(
306331
// Parse timeout
307332
if crdTool.Timeout != "" {
308333
if duration, err := time.ParseDuration(crdTool.Timeout); err == nil {
309-
tool.Timeout = duration
334+
tool.Timeout = vmcpconfig.Duration(duration)
310335
}
311336
}
312337

@@ -333,7 +358,7 @@ func (*VirtualMCPServerReconciler) convertCompositeTools(
333358
// Parse timeout
334359
if crdStep.Timeout != "" {
335360
if duration, err := time.ParseDuration(crdStep.Timeout); err == nil {
336-
step.Timeout = duration
361+
step.Timeout = vmcpconfig.Duration(duration)
337362
}
338363
}
339364

@@ -378,7 +403,7 @@ func (*VirtualMCPServerReconciler) convertTokenCache(
378403
}
379404
if vmcp.Spec.TokenCache.Memory.TTLOffset != "" {
380405
if duration, err := time.ParseDuration(vmcp.Spec.TokenCache.Memory.TTLOffset); err == nil {
381-
cache.Memory.TTLOffset = duration
406+
cache.Memory.TTLOffset = vmcpconfig.Duration(duration)
382407
}
383408
}
384409
}
@@ -408,20 +433,20 @@ func (*VirtualMCPServerReconciler) convertOperational(
408433

409434
if vmcp.Spec.Operational.Timeouts != nil {
410435
operational.Timeouts = &vmcpconfig.TimeoutConfig{
411-
PerWorkload: make(map[string]time.Duration),
436+
PerWorkload: make(map[string]vmcpconfig.Duration),
412437
}
413438

414439
// Parse default timeout
415440
if vmcp.Spec.Operational.Timeouts.Default != "" {
416441
if duration, err := time.ParseDuration(vmcp.Spec.Operational.Timeouts.Default); err == nil {
417-
operational.Timeouts.Default = duration
442+
operational.Timeouts.Default = vmcpconfig.Duration(duration)
418443
}
419444
}
420445

421446
// Parse per-workload timeouts
422447
for workload, timeoutStr := range vmcp.Spec.Operational.Timeouts.PerWorkload {
423448
if duration, err := time.ParseDuration(timeoutStr); err == nil {
424-
operational.Timeouts.PerWorkload[workload] = duration
449+
operational.Timeouts.PerWorkload[workload] = vmcpconfig.Duration(duration)
425450
}
426451
}
427452
}
@@ -435,7 +460,7 @@ func (*VirtualMCPServerReconciler) convertOperational(
435460
// Parse health check interval
436461
if vmcp.Spec.Operational.FailureHandling.HealthCheckInterval != "" {
437462
if duration, err := time.ParseDuration(vmcp.Spec.Operational.FailureHandling.HealthCheckInterval); err == nil {
438-
operational.FailureHandling.HealthCheckInterval = duration
463+
operational.FailureHandling.HealthCheckInterval = vmcpconfig.Duration(duration)
439464
}
440465
}
441466

@@ -449,7 +474,7 @@ func (*VirtualMCPServerReconciler) convertOperational(
449474
// Parse circuit breaker timeout
450475
if vmcp.Spec.Operational.FailureHandling.CircuitBreaker.Timeout != "" {
451476
if duration, err := time.ParseDuration(vmcp.Spec.Operational.FailureHandling.CircuitBreaker.Timeout); err == nil {
452-
operational.FailureHandling.CircuitBreaker.Timeout = duration
477+
operational.FailureHandling.CircuitBreaker.Timeout = vmcpconfig.Duration(duration)
453478
}
454479
}
455480
}

0 commit comments

Comments
 (0)