monitor: see unikernel VMs + use canonical container naming
Two drift-reporting bugs: 1. The monitor listed only the podman runtime, so unikernel VMs always showed observed=unknown (false drift). It now takes a ContainerLister and the agent passes a merged lister (containers + VMs), mirroring listAllContainers. 2. The monitor computed the lookup name as service+"-"+component, which is wrong when component==service (the name collapses to just the service, e.g. "uktest"/"mc-proxy"). It now uses the canonical naming.ContainerNameFor — extracted to a shared package so the agent and monitor can't disagree. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
37
internal/naming/naming.go
Normal file
37
internal/naming/naming.go
Normal file
@@ -0,0 +1,37 @@
|
||||
// Package naming centralizes the container/VM naming convention shared by the
|
||||
// agent (which creates and reconciles containers) and the monitor (which looks
|
||||
// them up by name). Keeping it in one place prevents the two from disagreeing.
|
||||
package naming
|
||||
|
||||
import "strings"
|
||||
|
||||
// ContainerNameFor returns the expected container (or unikernel VM) name for a
|
||||
// service and component. For single-component services where the component
|
||||
// name equals the service name, the name is just the service name (e.g.,
|
||||
// "mc-proxy" not "mc-proxy-mc-proxy").
|
||||
func ContainerNameFor(service, component string) string {
|
||||
if service == component {
|
||||
return service
|
||||
}
|
||||
return service + "-" + component
|
||||
}
|
||||
|
||||
// SplitContainerName splits a container name into service and component parts.
|
||||
// It checks known service names first to handle names like "mc-proxy" where a
|
||||
// naive split on "-" would produce the wrong result. If no known service
|
||||
// matches, it falls back to splitting on the first "-".
|
||||
func SplitContainerName(name string, knownServices map[string]bool) (service, component string) {
|
||||
if knownServices[name] {
|
||||
return name, name
|
||||
}
|
||||
for svc := range knownServices {
|
||||
prefix := svc + "-"
|
||||
if strings.HasPrefix(name, prefix) && len(name) > len(prefix) {
|
||||
return svc, name[len(prefix):]
|
||||
}
|
||||
}
|
||||
if i := strings.Index(name, "-"); i >= 0 {
|
||||
return name[:i], name[i+1:]
|
||||
}
|
||||
return name, name
|
||||
}
|
||||
Reference in New Issue
Block a user