{"record":{"id":"b4df8b2376519169","repo":"kubernetes/kops","slug":"failed-to-find-network-for-server-group-q","errorCode":null,"errorMessage":"failed to find network for server group %q","messagePattern":"failed to find network for server group %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/hetznertasks/servergroup.go","lineNumber":205,"sourceCode":"\t\t\t}\n\t\t}\n\t}\n\n\tactualCount := 0\n\tif a != nil {\n\t\tactualCount = a.Count\n\t}\n\texpectedCount := e.Count\n\n\tif actualCount >= expectedCount {\n\t\treturn nil\n\t}\n\n\tif len(e.SSHKeys) == 0 {\n\t\treturn fmt.Errorf(\"failed to find ssh keys for server group %q\", fi.ValueOf(e.Name))\n\t}\n\tif e.Network == nil {\n\t\treturn fmt.Errorf(\"failed to find network for server group %q\", fi.ValueOf(e.Name))\n\t}\n\n\tuserData, err := fi.ResourceAsString(e.UserData)\n\tif err != nil {\n\t\treturn err\n\t}\n\tuserDataBytes, err := fi.ResourceAsBytes(e.UserData)\n\tif err != nil {\n\t\treturn err\n\t}\n\tuserDataHash := SafeBytesHash(userDataBytes)\n\n\tnetworkID, err := strconv.ParseInt(fi.ValueOf(e.Network.ID), 10, 64)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to convert network ID %q to int: %w\", fi.ValueOf(e.Network.ID), err)\n\t}\n\n\tfor i := 1; i <= expectedCount-actualCount; i++ {","sourceCodeStart":187,"sourceCodeEnd":223,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/hetznertasks/servergroup.go#L187-L223","documentation":"When creating servers for a Hetzner server group, kOps requires the group to be attached to the cluster's private network. RenderHetzner throws this when the e.Network pointer is nil — the network task reference was never resolved, so server creation cannot proceed with a valid network attachment.","triggerScenarios":"RenderHetzner in upup/pkg/fi/cloudup/hetznertasks/servergroup.go:205 finds e.Network == nil after SSH key validation passes and the group needs scaling up (actualCount < expectedCount), meaning the Network task link is unresolved in the rendered task graph.","commonSituations":"The cluster's network configuration is missing or the Network task failed earlier leaving the reference nil; spec omits the Hetzner network section; task dependency ordering broken so the server group renders before the network resolves.","solutions":["Ensure the cluster spec defines a Hetzner network so the Network task is created and linked to the server group.","Check earlier logs for a failed Network task (e.g. errors 2846/2847) and fix that root cause first.","Re-run `kops update cluster` after network configuration is corrected.","Verify the network task completes before the server group task in the task graph ordering."],"exampleFix":"// before (cluster spec, Hetzner section)\nnetwork: null\n// after\nnetwork:\n  id: \"1234567\"","handlingStrategy":"validation","validationCode":"if cluster.Spec.Network == nil || cluster.Spec.Network.ID == \"\" {\n\treturn fmt.Errorf(\"hetzner cluster spec must define a network for server groups\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Define the Hetzner network section in the cluster spec before creating server groups.","Fix any earlier Network task failures before retrying server group creation.","Review `kops update cluster` output for unresolved network task references."],"tags":["hetzner","network","servergroup","config","nil-reference"],"backgroundTag":"missing-network-config","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"}