{"record":{"id":"c115d99eefb5a7fe","repo":"kubernetes/kops","slug":"error-creating-akamai-linode-instance-for-group","errorCode":null,"errorMessage":"error creating Akamai (Linode) instance for group %q: %w","messagePattern":"error creating Akamai \\(Linode\\) instance for group %q: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/linodetasks/instance.go","lineNumber":242,"sourceCode":"\ttoCreate := expected.Count - actualCount\n\tfor range toCreate {\n\t\tlabel, err := buildLinodeInstanceLabel(fi.ValueOf(expected.Name))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error generating Akamai (Linode) instance label for group %q: %w\", fi.ValueOf(expected.Name), err)\n\t\t}\n\t\t_, err = t.Cloud.Client().CreateInstance(context.Background(), linodego.InstanceCreateOptions{\n\t\t\tRegion:              expected.Region,\n\t\t\tType:                expected.Type,\n\t\t\tLabel:               label,\n\t\t\tImage:               expected.Image,\n\t\t\tAuthorizedKeys:      authorizedKeys,\n\t\t\tTags:                instanceTags,\n\t\t\tMetadata:            &linodego.InstanceMetadataOptions{UserData: encodedUserData},\n\t\t\tInterfaceGeneration: linodego.GenerationLinode,\n\t\t\tLinodeInterfaces:    interfaces,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error creating Akamai (Linode) instance for group %q: %w\", fi.ValueOf(expected.Name), err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// generateUserDataHash generates a unique hash for the given user data string.\nfunc generateUserDataHash(userData string) string {\n\thash := sha256.Sum256([]byte(userData))\n\tfullHashString := base64.RawURLEncoding.EncodeToString(hash[:])\n\n\t// Truncate the hash to ensure the tag name does not exceed 50 characters.\n\tmaxLength := 50 - len(linode.TagKubernetesInstanceUserData) - 1 // 1 for the colon separator\n\ttruncatedHash := fullHashString[:maxLength]\n\n\treturn truncatedHash\n}\n","sourceCodeStart":224,"sourceCodeEnd":260,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/linodetasks/instance.go#L224-L260","documentation":"RenderLinode calls the Linode API CreateInstance and wraps any API error with the group name. This is the wrapper you see when instance creation itself fails (quota, invalid options, region issues, auth).","triggerScenarios":"linodego CreateInstance returns an error: invalid region/type/image, insufficient account quota, auth token failure, or invalid interface configuration.","commonSituations":"Exceeded Linode account limit, plan type unavailable in region, expired LINODE_TOKEN, or specifying an image the plan doesn't support.","solutions":["Read the wrapped inner error for the actual API cause","Verify the Linode API token is valid and has write scopes","Check the region supports the chosen plan type and the image is valid","Check account instance limits/quota in the Linode manager","Retry after resolving; transient API errors may just need a re-run"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// pre-check plan availability and quota via linodego before apply\nif _, _, err := client.ListTypes(ctx, &linodego.ListOptions{}); err != nil { return err }","typeGuard":null,"tryCatchPattern":"_, err = client.CreateInstance(ctx, opts)\nif err != nil {\n    if linodego.ErrorNeedsRetry(err) { /* retry with backoff */ }\n    return fmt.Errorf(\"error creating Akamai (Linode) instance for group %q: %w\", name, err)\n}","preventionTips":["Verify region/plan/image combos before applying","Check account instance quotas in advance","Keep the API token valid and scoped for writes","Retry transient API errors with backoff"],"tags":["linode","api","instance-creation"],"backgroundTag":"cloud-api-create-failure","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"}