Fix container name handling for hyphenated service names
Extract ContainerNameFor and SplitContainerName into names.go. ContainerNameFor handles single-component services where service name equals component name (e.g., mc-proxy → "mc-proxy" not "mc-proxy-mc-proxy"). SplitContainerName checks known services from the registry before falling back to naive split on "-", fixing mc-proxy being misidentified as service "mc" component "proxy". Also fixes podman ps JSON parsing (Command field is []string not string) found during deployment. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,6 @@ package agent
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
mcpv1 "git.wntrmute.dev/kyle/mcp/gen/mcp/v1"
|
||||
@@ -75,7 +74,10 @@ func (a *Agent) liveCheckServices(ctx context.Context) ([]*mcpv1.ServiceInfo, er
|
||||
}
|
||||
|
||||
var result []*mcpv1.ServiceInfo
|
||||
knownServices := make(map[string]bool, len(services))
|
||||
for _, svc := range services {
|
||||
knownServices[svc.Name] = true
|
||||
|
||||
components, err := registry.ListComponents(a.DB, svc.Name)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("list components for %q: %w", svc.Name, err)
|
||||
@@ -87,7 +89,7 @@ func (a *Agent) liveCheckServices(ctx context.Context) ([]*mcpv1.ServiceInfo, er
|
||||
}
|
||||
|
||||
for _, comp := range components {
|
||||
containerName := svc.Name + "-" + comp.Name
|
||||
containerName := ContainerNameFor(svc.Name, comp.Name)
|
||||
ci := &mcpv1.ComponentInfo{
|
||||
Name: comp.Name,
|
||||
Image: comp.Image,
|
||||
@@ -116,7 +118,7 @@ func (a *Agent) liveCheckServices(ctx context.Context) ([]*mcpv1.ServiceInfo, er
|
||||
continue
|
||||
}
|
||||
|
||||
svcName, compName := splitContainerName(c.Name)
|
||||
svcName, compName := SplitContainerName(c.Name, knownServices)
|
||||
|
||||
result = append(result, &mcpv1.ServiceInfo{
|
||||
Name: svcName,
|
||||
@@ -210,13 +212,3 @@ func (a *Agent) GetServiceStatus(ctx context.Context, req *mcpv1.GetServiceStatu
|
||||
RecentEvents: protoEvents,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// splitContainerName splits a container name like "metacrypt-api" into service
|
||||
// and component parts. If there is no hyphen, the whole name is used as both
|
||||
// the service and component name.
|
||||
func splitContainerName(name string) (service, component string) {
|
||||
if i := strings.Index(name, "-"); i >= 0 {
|
||||
return name[:i], name[i+1:]
|
||||
}
|
||||
return name, name
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user