{"record":{"id":"236f17ad7339fc93","repo":"kubernetes/kops","slug":"unable-to-locate-asset-q-236f17","errorCode":null,"errorMessage":"unable to locate asset %q","messagePattern":"unable to locate asset %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nodeup/pkg/model/kubelet.go","lineNumber":171,"sourceCode":"\t{\n\t\tt, err := b.buildSystemdEnvironmentFile(c.Context(), kubeletConfig)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tc.AddTask(t)\n\t}\n\n\t{\n\t\t// @TODO Extract to common function?\n\t\tassetName := \"kubelet\"\n\t\tassetPath := \"\"\n\t\t// @TODO make Find call to an interface, we cannot mock out this function because it finds a file on disk\n\t\tasset, err := b.Assets.Find(assetName, assetPath)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"trying to locate asset %q: %v\", assetName, err)\n\t\t}\n\t\tif asset == nil {\n\t\t\treturn fmt.Errorf(\"unable to locate asset %q\", assetName)\n\t\t}\n\n\t\tc.AddTask(&nodetasks.File{\n\t\t\tPath:     b.kubeletPath(),\n\t\t\tContents: asset,\n\t\t\tType:     nodetasks.FileType_File,\n\t\t\tMode:     s(\"0755\"),\n\t\t})\n\t}\n\t{\n\t\tif kubeletConfig.PodManifestPath != \"\" {\n\t\t\tt, err := b.buildManifestDirectory(kubeletConfig)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tc.EnsureTask(t)\n\t\t}\n\t}","sourceCodeStart":153,"sourceCodeEnd":189,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/nodeup/pkg/model/kubelet.go#L153-L189","documentation":"After Find succeeds, a nil kubelet asset means no `kubelet` binary asset was registered for this cluster/version, so nodeup cannot place the kubelet binary at b.kubeletPath(). Mirrors error 680 but for the kubelet asset.","triggerScenarios":"Assets.Find(\"kubelet\", \"\") returns (nil, nil): the asset registry contains no kubelet asset — wrong kubernetesVersion, incomplete mirror, or assets not generated for the target arch.","commonSituations":"Air-gapped installs missing the kubelet binary in the mirror; unsupported/typo'd Kubernetes version; nodeup run before `kops update` uploaded assets.","solutions":["Verify the kubelet asset exists in the asset store at the expected arch-specific URL.","Correct the cluster's kubernetesVersion to a version with published kubelet binaries.","Re-run kops update cluster to regenerate/refresh assets, then retry nodeup.","For air-gapped setups, upload the exact kubelet binary matching the cluster version."],"exampleFix":"// before\nkubernetesVersion: v1.32.0-alpha.99\n// after\nkubernetesVersion: v1.32.0","handlingStrategy":"validation","validationCode":"u := fmt.Sprintf(\"%s/%s/bin/linux/amd64/kubelet\", baseURL, k8sVersion)\nresp, err := http.Head(u)\nif err != nil || resp.StatusCode != http.StatusOK {\n    return fmt.Errorf(\"kubelet binary not published at %s\", u)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use stable kubernetesVersion values with published kubelet binaries.","Mirror the exact binaries matching the cluster version for air-gapped installs.","Run kops update cluster before nodeup so assets are registered."],"tags":["nodeup","assets","kubelet"],"backgroundTag":"asset-not-found","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}