{"record":{"id":"9b7ec1540ed3b5db","repo":"kubernetes/kops","slug":"dns-is-not-yet-implemented-for-akamai-linode","errorCode":null,"errorMessage":"DNS is not yet implemented for Akamai (Linode)","messagePattern":"DNS is not yet implemented for Akamai \\(Linode\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/linode/cloud.go","lineNumber":115,"sourceCode":"\tclient.SetUserAgent(\"kops/\" + kopsv.Version)\n\tclient.SetToken(accessToken)\n\n\treturn &Cloud{\n\t\tregion: region,\n\t\tclient: &client,\n\t}, nil\n}\n\nfunc (c *Cloud) Client() LinodeClient {\n\treturn c.client\n}\n\nfunc (c *Cloud) ProviderID() kops.CloudProviderID {\n\treturn kops.CloudProviderLinode\n}\n\nfunc (c *Cloud) DNS() (dnsprovider.Interface, error) {\n\treturn nil, fmt.Errorf(\"DNS is not yet implemented for Akamai (Linode)\")\n}\n\nfunc (c *Cloud) FindVPCInfo(id string) (*fi.VPCInfo, error) {\n\treturn nil, nil\n}\n\nfunc (c *Cloud) DeleteInstance(instance *cloudinstances.CloudInstance) error {\n\tinstanceID, err := strconv.Atoi(instance.ID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error parsing Akamai (Linode) instance ID %q: %w\", instance.ID, err)\n\t}\n\n\tif err := c.client.DeleteInstance(context.Background(), instanceID); err != nil {\n\t\tif linodego.IsNotFound(err) {\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"error deleting Akamai (Linode) instance %q: %w\", instance.ID, err)\n\t}","sourceCodeStart":97,"sourceCodeEnd":133,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/linode/cloud.go#L97-L133","documentation":"The Akamai (Linode) Cloud.DNS() implementation is a stub: the Linode provider has no DNS integration in kops, so any request for a dnsprovider.Interface fails with this explicit 'not yet implemented' error.","triggerScenarios":"Any kops code path that requires cloud DNS for a Linode cluster — e.g. `kops update cluster` with gossip disabled (DNS-based cluster naming), or DNS validation during cluster creation.","commonSituations":"Users creating a Linode cluster with a real DNS name expecting kOps to create DNS records; the provider only supports gossip DNS (kube-dns/ CoreDNS gossip).","solutions":["Configure the cluster to use gossip DNS (e.g. top-level DNS: type gossip / `kops create cluster --dns gossip`) so no cloud DNS provider is needed.","Manage DNS records externally for the cluster name and keep gossip DNS inside the cluster.","Track/upvote upstream support for Linode DNS in kops before relying on DNS-mode clusters."],"exampleFix":"// before (create with DNS)\nkops create cluster --cloud linode --name cluster.example.com ...\n// after (gossip DNS)\nkops create cluster --cloud linode --name cluster.k8s.local ...","handlingStrategy":"fallback","validationCode":"// before provisioning, require gossip DNS for Linode:\nif provider == kops.CloudProviderLinode && cluster.Spec.DNS != nil && cluster.Spec.DNS.Type != \"gossip\" {\n\treturn fmt.Errorf(\"Linode provider requires gossip DNS (e.g. cluster name ending in .k8s.local)\")\n}","typeGuard":null,"tryCatchPattern":"dns, err := cloud.DNS()\nif err != nil && strings.Contains(err.Error(), \"not yet implemented for Akamai\") {\n\t// fall back to gossip DNS path instead of cloud DNS\n}","preventionTips":["Use a .k8s.local cluster name so kops selects gossip DNS","Do not configure route53/external DNS controller expectations for Linode clusters","Check the provider capability matrix before enabling DNS-dependent features"],"tags":["linode","akamai","dns","unimplemented"],"backgroundTag":"feature-not-implemented","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"}