{"record":{"id":"2f3e99875ac24bec","repo":"kubernetes/kops","slug":"address-had-no-ip-v","errorCode":null,"errorMessage":"Address had no IP: %v","messagePattern":"Address had no IP: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/gcetasks/forwardingrule.go","lineNumber":198,"sourceCode":"\t\t\treturn fmt.Errorf(\"cannot specify both %q and %q for forwarding rule target.\", o.Target, e.BackendService)\n\t\t}\n\t\to.BackendService = e.BackendService.URL(t.Cloud)\n\t}\n\n\tif e.IPAddress != nil {\n\t\to.IPAddress = fi.ValueOf(e.IPAddress.IPAddress)\n\t\tif o.IPAddress == \"\" {\n\t\t\taddr, err := e.IPAddress.find(t.Cloud)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"error finding Address %q: %v\", e.IPAddress, err)\n\t\t\t}\n\t\t\tif addr == nil {\n\t\t\t\treturn fmt.Errorf(\"Address %q was not found\", e.IPAddress)\n\t\t\t}\n\n\t\t\to.IPAddress = fi.ValueOf(addr.IPAddress)\n\t\t\tif o.IPAddress == \"\" {\n\t\t\t\treturn fmt.Errorf(\"Address had no IP: %v\", e.IPAddress)\n\t\t\t}\n\t\t}\n\t}\n\tif o.IPAddress != \"\" && e.RuleIPAddress != nil {\n\t\treturn fmt.Errorf(\"Specified both IP Address and rule-managed IP address: %v, %v\", e.IPAddress, *e.RuleIPAddress)\n\t}\n\tif e.RuleIPAddress != nil {\n\t\to.IPAddress = *e.RuleIPAddress\n\t}\n\n\tif e.Network != nil {\n\t\tproject := t.Cloud.Project()\n\t\tif e.Network.Project != nil {\n\t\t\tproject = *e.Network.Project\n\t\t}\n\t\to.Network = e.Network.URL(project)\n\t}\n","sourceCodeStart":180,"sourceCodeEnd":216,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/gcetasks/forwardingrule.go#L180-L216","documentation":"After resolving the referenced Address, kOps checks that it actually carries an IP. If addr.IPAddress is empty, this error fires. A GCE Address resource should always have an address once reserved; an empty value indicates a malformed lookup result or a partially-created address.","triggerScenarios":"find() returned a non-nil Address whose IPAddress string is empty — e.g. a stale/partial resource state or an unexpected API response shape — while rendering a ForwardingRule whose spec gave no concrete IP.","commonSituations":"Rare race where the Address exists in the API listing but not yet fully reserved; corrupted cached state; version skew between kops and the API response fields.","solutions":["Re-run kops update — the address may have been mid-reservation during the previous attempt.","Delete and recreate the GCE Address if it persistently reports no IP.","Set the ipAddress explicitly in the spec to bypass resolution.","Check gcloud compute addresses describe <name> to verify RESERVATION state."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// before applying, confirm the address reports an IP:\n// gcloud compute addresses describe ADDR --region=R --format=\"value(address)\"","typeGuard":null,"tryCatchPattern":"err := kopsUpdate()\nif err != nil && strings.Contains(err.Error(), \"Address had no IP\") {\n  time.Sleep(10 * time.Second)\n  // retry once; the address may have been mid-reservation\n  if err := kopsUpdate(); err != nil {\n    log.Fatalf(\"address has no IP after retry: %v\", err)\n  }\n}","preventionTips":["Re-run apply after transient address-state errors before deeper debugging.","Recreate GCE addresses that persistently report no IP.","Prefer explicit ipAddress values in specs to avoid resolution races."],"tags":["gce","load-balancer","address","state"],"backgroundTag":"address-missing-ip","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"}