{"record":{"id":"e5ea94bb439886c2","repo":"kubernetes/kops","slug":"error-reading-created-disk-v","errorCode":null,"errorMessage":"error reading created Disk: %v","messagePattern":"error reading created Disk: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/gcetasks/disk.go","lineNumber":146,"sourceCode":"\tif e.VolumeThroughput != nil {\n\t\tdisk.ProvisionedThroughput = *e.VolumeThroughput\n\t}\n\n\tif a == nil {\n\t\top, err := cloud.Compute().Disks().Insert(t.Cloud.Project(), *e.Zone, disk)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error creating Disk: %v\", err)\n\t\t}\n\t\terr = cloud.WaitForOp(op)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error during Disk creation: %v\", err)\n\t\t}\n\t}\n\n\tif changes.Labels != nil {\n\t\td, err := cloud.Compute().Disks().Get(t.Cloud.Project(), *e.Zone, disk.Name)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error reading created Disk: %v\", err)\n\t\t}\n\n\t\tlabelsRequest := &compute.ZoneSetLabelsRequest{\n\t\t\tLabelFingerprint: d.LabelFingerprint,\n\t\t\tLabels:           make(map[string]string),\n\t\t}\n\t\t// Danger: labels replace tags on instances; but thankfully volumes don't have tags\n\t\t//for _, k := range d.Tags {\n\t\t//\tlabelsRequest.Labels[k] = \"\"\n\t\t//}\n\t\tmaps.Copy(labelsRequest.Labels, d.Labels)\n\t\tmaps.Copy(labelsRequest.Labels, t.Cloud.Labels())\n\t\tmaps.Copy(labelsRequest.Labels, e.Labels)\n\t\tklog.V(2).Infof(\"Setting labels on disk %q: %v\", disk.Name, labelsRequest.Labels)\n\t\tif err = t.Cloud.Compute().Disks().SetLabels(t.Cloud.Project(), *e.Zone, disk.Name, labelsRequest); err != nil {\n\t\t\treturn fmt.Errorf(\"error setting labels on created Disk: %v\", err)\n\t\t}\n\t\tchanges.Labels = nil","sourceCodeStart":128,"sourceCodeEnd":164,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/gcetasks/disk.go#L128-L164","documentation":"After creating (or confirming) the disk, RenderGCE reads the disk back with Disks().Get to fetch its label fingerprint; this error wraps any failure of that read. It indicates the disk could not be fetched immediately after its creation flow.","triggerScenarios":"changes.Labels is non-nil and cloud.Compute().Disks().Get(project, zone, disk.Name) returns an error — typically notFound if creation silently failed, or a transient API error.","commonSituations":"Disk creation operation reported success but the disk is not yet visible; wrong project/zone in cloud config; transient GCP API outage; permission revoked between insert and get.","solutions":["Check the wrapped error: if notFound, verify the Insert operation truly succeeded","Retry kops update — Get is often transiently failing right after creation","Verify service account has compute.disks.get permission on the project","Confirm project and zone in the cluster config match where the disk was created"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// ensure IAM: test compute.disks.get before applying\n_, err := computeService.Disks.Get(project, zone, diskName).Do()","typeGuard":null,"tryCatchPattern":"d, err := cloud.Compute().Disks().Get(project, zone, name)\nif err != nil {\n  if gce.IsNotFound(err) { /* recreate or wait */ }\n  return fmt.Errorf(\"read created disk: %w\", err)\n}","preventionTips":["Retry Get briefly after creation (eventual visibility)","Keep service account compute.disks.get permission","Avoid concurrent kops runs against the same project"],"tags":["gcp","gce","disk","api-read"],"backgroundTag":"gcp-operation-failed","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"}