{"record":{"id":"7753f7193769c4e8","repo":"lima-vm/lima","slug":"daemon-q-not-defined","errorCode":null,"errorMessage":"daemon %#q not defined","messagePattern":"daemon %#q not defined","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/networks/commands.go","lineNumber":91,"sourceCode":"\treturn filepath.Join(c.Paths.VarRun, fmt.Sprintf(\"%s_%s.pid\", name, daemon))\n}\n\nfunc (c *Config) LogFile(name, daemon, stream string) string {\n\tnetworksDir, _ := dirnames.LimaNetworksDir()\n\treturn filepath.Join(networksDir, fmt.Sprintf(\"%s_%s.%s.log\", name, daemon, stream))\n}\n\nfunc (c *Config) User(daemon string) (osutil.User, error) {\n\tif ok, _ := c.IsDaemonInstalled(daemon); !ok {\n\t\tdaemonPath, _ := c.DaemonPath(daemon)\n\t\treturn osutil.User{}, fmt.Errorf(\"daemon %#q (path=%#q) is not available\", daemon, daemonPath)\n\t}\n\t//nolint:gocritic // singleCaseSwitch: should rewrite switch statement to if statement\n\tswitch daemon {\n\tcase SocketVMNet:\n\t\treturn osutil.LookupUser(\"root\")\n\t}\n\treturn osutil.User{}, fmt.Errorf(\"daemon %#q not defined\", daemon)\n}\n\nfunc (c *Config) MkdirCmd() string {\n\treturn fmt.Sprintf(\"/bin/mkdir -m 775 -p %s\", c.Paths.VarRun)\n}\n\nfunc (c *Config) StartCmd(name, daemon string) string {\n\tif ok, _ := c.IsDaemonInstalled(daemon); !ok {\n\t\tpanic(fmt.Errorf(\"daemon %#q is not available\", daemon))\n\t}\n\tvar cmd string\n\tswitch daemon {\n\tcase SocketVMNet:\n\t\tnw := c.Networks[name]\n\t\tif c.Paths.SocketVMNet == \"\" {\n\t\t\tpanic(\"c.Paths.SocketVMNet is empty\")\n\t\t}\n\t\tcmd = fmt.Sprintf(\"%s --pidfile=%s --socket-group=%s --vmnet-mode=%s\",","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/lima-vm/lima/blob/dd909d0973cd84fa35f9e1693181b4585ea616c1/pkg/networks/commands.go#L73-L109","documentation":"After the daemon is confirmed installed, Config.User switches on the daemon name to return the user that runs it (root for socket_vmnet). If the daemon is installed but has no mapping in the switch, it returns 'daemon %#q not defined'. This guards against a name that passed path lookup but has no user rule.","triggerScenarios":"Calling User(daemon) with a daemon string that is not exactly networks.SocketVMNet — it reaches the fall-through return after the single-case switch.","commonSituations":"Same root cause as 'unknown daemon type': legacy daemon names or typos passed through caller code; a fork that added a daemon path entry but forgot to add the user-mapping case in User.","solutions":["Pass networks.SocketVMNet as the daemon name","Add a case in Config.User for any new daemon introduced in a fork","Validate the daemon name early (e.g. via DaemonPath) before calling User"],"exampleFix":"// before\nu, err := cfg.User(\"socketvmnet\")\n// after\nu, err := cfg.User(networks.SocketVMNet)","handlingStrategy":"type-guard","validationCode":"if daemon != networks.SocketVMNet {\n    return fmt.Errorf(\"no user mapping for daemon %q\", daemon)\n}","typeGuard":"func hasUserMapping(d string) bool { return d == networks.SocketVMNet }","tryCatchPattern":"u, err := cfg.User(daemon)\nif err != nil {\n    return fmt.Errorf(\"daemon %q has no configured user; use socket_vmnet\", daemon)\n}","preventionTips":["Use the SocketVMNet constant for all daemon references","When adding daemons in forks, update both DaemonPath and User","Fail fast with DaemonPath before calling User"],"tags":["network","daemon","config","go"],"backgroundTag":"unknown-daemon-type","analyzedSha":"dd909d0973cd84fa35f9e1693181b4585ea616c1","analyzedAt":"2026-09-01T14:24:59.842Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}