{"record":{"id":"a57c6728c500f2f6","repo":"kubernetes/kops","slug":"unable-to-find-runc-config","errorCode":null,"errorMessage":"unable to find runc config","messagePattern":"unable to find runc config","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/nodemodel/wellknownassets/runc.go","lineNumber":42,"sourceCode":"\t\"k8s.io/kops/pkg/apis/kops/model\"\n\t\"k8s.io/kops/pkg/assets\"\n\t\"k8s.io/kops/upup/pkg/fi\"\n\t\"k8s.io/kops/util/pkg/architectures\"\n)\n\nconst (\n\truncVersionUrlAmd64 = \"https://github.com/opencontainers/runc/releases/download/v%s/runc.amd64\"\n\truncVersionUrlArm64 = \"https://github.com/opencontainers/runc/releases/download/v%s/runc.arm64\"\n)\n\nfunc FindRuncAsset(ig model.InstanceGroup, assetBuilder *assets.AssetBuilder, arch architectures.Architecture) (*assets.FileAsset, error) {\n\tcontainerd := ig.RawClusterSpec().Containerd\n\tif containerd == nil {\n\t\treturn nil, fmt.Errorf(\"unable to find containerd config\")\n\t}\n\n\tif containerd.Runc == nil {\n\t\treturn nil, fmt.Errorf(\"unable to find runc config\")\n\t}\n\trunc := containerd.Runc\n\n\tcanonicalURL := \"\"\n\tknownHash := \"\"\n\n\tif runc.Packages != nil {\n\t\tif arch == architectures.ArchitectureAmd64 && runc.Packages.UrlAmd64 != nil && runc.Packages.HashAmd64 != nil {\n\t\t\tcanonicalURL = fi.ValueOf(runc.Packages.UrlAmd64)\n\t\t\tknownHash = fi.ValueOf(runc.Packages.HashAmd64)\n\t\t}\n\t\tif arch == architectures.ArchitectureArm64 && runc.Packages.UrlArm64 != nil && runc.Packages.HashArm64 != nil {\n\t\t\tcanonicalURL = fi.ValueOf(runc.Packages.UrlArm64)\n\t\t\tknownHash = fi.ValueOf(runc.Packages.HashArm64)\n\t\t}\n\t}\n\n\tif canonicalURL == \"\" {","sourceCodeStart":24,"sourceCodeEnd":60,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/nodemodel/wellknownassets/runc.go#L24-L60","documentation":"Fires when the cluster spec's containerd block exists but containerd.Runc is nil, so FindRuncAsset cannot determine which runc binary to resolve into file assets during node model building. It is a configuration guard: the cluster manifest omits the containerd.runc section entirely rather than specifying a version or package URLs.","triggerScenarios":"Thrown at pkg/nodemodel/wellknownassets/runc.go:42 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Add a containerd.runc section to the cluster spec (e.g. containerd.runc.version) so the runc asset can be resolved","Set containerd.runc.packages.urlAmd64/urlArm64 and matching hashes for pinned downloads","Upgrade or regenerate the cluster manifest from a kOps version/template that includes the runc config"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}