{"record":{"id":"04e93352e6a9387e","repo":"tailscale/tailscale","slug":"writing-s-w","errorCode":null,"errorMessage":"writing %s: %w","messagePattern":"writing (.+?): %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/k8s-operator/generate/main.go","lineNumber":159,"sourceCode":"// by default). The generated template file uses the same base filename as the\n// source CRD so no new CRD requires a code change here.\nfunc generate(baseDir string) error {\n\tfiles, err := crdFiles(baseDir)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, name := range files {\n\t\tsrc, err := os.ReadFile(filepath.Join(baseDir, crdsPath, name))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"reading %s: %w\", name, err)\n\t\t}\n\t\tvar buf bytes.Buffer\n\t\tbuf.WriteString(helmConditionalStart)\n\t\tbuf.Write(src)\n\t\tbuf.WriteString(helmConditionalEnd)\n\t\tdst := filepath.Join(baseDir, helmTemplatesPath, name)\n\t\tif err := os.WriteFile(dst, buf.Bytes(), 0o664); err != nil {\n\t\t\treturn fmt.Errorf(\"writing %s: %w\", dst, err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// cleanup removes every CRD template file previously written by generate.\n// It globs helmTemplatesPath rather than re-reading crdsPath so a CRD deleted\n// between generate and cleanup is still tidied up.\nfunc cleanup(baseDir string) error {\n\tlog.Print(\"Cleaning up CRDs from Helm templates\")\n\tmatches, err := filepath.Glob(filepath.Join(baseDir, helmTemplatesPath, crdFilePrefix+\"*.yaml\"))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"globbing Helm templates: %w\", err)\n\t}\n\tfor _, p := range matches {\n\t\tif err := os.Remove(p); err != nil && !os.IsNotExist(err) {\n\t\t\treturn fmt.Errorf(\"removing %s: %w\", p, err)\n\t\t}","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/tailscale/tailscale/blob/cfe32b8be6a33f8e24fbc369cbfbf7c729d9e042/cmd/k8s-operator/generate/main.go#L141-L177","documentation":"Error \"writing %s: %w\" thrown in tailscale/tailscale.","triggerScenarios":"Thrown at cmd/k8s-operator/generate/main.go:159 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"cfe32b8be6a33f8e24fbc369cbfbf7c729d9e042","analyzedAt":"2026-08-15T19:58:31.583Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}