{"record":{"id":"f6a2230fe84d80a6","repo":"kubernetes/kops","slug":"unknown-arch-for-cni-plugin-binaries-asset-s","errorCode":null,"errorMessage":"unknown arch for CNI plugin binaries asset: %s","messagePattern":"unknown arch for CNI plugin binaries asset: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/nodemodel/wellknownassets/cni.go","lineNumber":105,"sourceCode":"\t\t\tcniAssetURL = defaultCNIAssetAmd64K8s_35\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.34\"):\n\t\t\tcniAssetURL = defaultCNIAssetAmd64K8s_34\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.32\"):\n\t\t\tcniAssetURL = defaultCNIAssetAmd64K8s_32\n\t\t}\n\tcase architectures.ArchitectureArm64:\n\t\tswitch {\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.36\"):\n\t\t\tcniAssetURL = defaultCNIAssetArm64K8s_36\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.35\"):\n\t\t\tcniAssetURL = defaultCNIAssetArm64K8s_35\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.34\"):\n\t\t\tcniAssetURL = defaultCNIAssetArm64K8s_34\n\t\tcase ig.KubernetesVersion().IsGTE(\"1.32\"):\n\t\t\tcniAssetURL = defaultCNIAssetArm64K8s_32\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown arch for CNI plugin binaries asset: %s\", arch)\n\t}\n\n\tif cniAssetURL == \"\" {\n\t\treturn nil, fmt.Errorf(\"unknown CNI plugin binaries asset: %s\", arch)\n\t} else {\n\t\tklog.V(2).Infof(\"Adding CNI plugin binaries asset: %s\", cniAssetURL)\n\t}\n\n\tu, err := url.Parse(cniAssetURL)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to parse CNI plugin binaries asset URL %q: %v\", cniAssetURL, err)\n\t}\n\n\tasset, err := assetBuilder.RemapFile(u, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to remap CNI plugin binaries asset: %v\", err)\n\t}\n","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/nodemodel/wellknownassets/cni.go#L87-L123","documentation":"When no env-var override is set, FindCNIAssets selects a default CNI plugin URL by CPU architecture via a switch on architectures.Architecture (amd64/arm64 only). This error is returned for any other architecture value, meaning kOps has no default CNI plugin binaries defined for that platform.","triggerScenarios":"FindCNIAssets is called (via BuildKubernetesFileAssets) with arch set to a value other than ArchitectureAmd64 or ArchitectureArm64 — no env override present, so the switch hits its default branch.","commonSituations":"Building for a 32-bit or exotic platform; a custom kOps build/fork passing an incorrectly initialized Architecture value; code changes that map machine types to an unsupported arch.","solutions":["Use a supported architecture: ensure instance groups/machine types resolve to amd64 or arm64","Set CNI_VERSION_URL and CNI_ASSET_HASH_STRING env vars to explicitly supply a CNI asset for your platform, bypassing the arch switch","If calling FindCNIAssets directly from code, pass architectures.ArchitectureAmd64 or ArchitectureArm64","Check for typos or unexported/zero-value Architecture values in custom tooling"],"exampleFix":"// before\narch := architectures.Architecture(\"i386\")\n// after\narch := architectures.ArchitectureAmd64","handlingStrategy":"type-guard","validationCode":"if arch != architectures.ArchitectureAmd64 && arch != architectures.ArchitectureArm64 {\n    return fmt.Errorf(\"CNI assets only supported for amd64/arm64, got %s\", arch)\n}","typeGuard":"func isSupportedArch(a architectures.Architecture) bool {\n    return a == architectures.ArchitectureAmd64 || a == architectures.ArchitectureArm64\n}","tryCatchPattern":"if !isSupportedArch(arch) {\n    return fmt.Errorf(\"unsupported arch %s for CNI assets; set CNI_VERSION_URL/CNI_ASSET_HASH_STRING to override\", arch)\n}\nasset, err := FindCNIAssets(ig, assetBuilder, arch)","preventionTips":["Use amd64/arm64 machine types for nodes","Check arch resolution in custom tooling before calling kOps","For other platforms, set the CNI_VERSION_URL/CNI_ASSET_HASH_STRING overrides"],"tags":["kops","cni","architecture","unsupported-platform"],"backgroundTag":"unsupported-architecture","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"}