{"record":{"id":"5dcc7d7199b5187c","repo":"kubernetes/kops","slug":"error-getting-image-information-v","errorCode":null,"errorMessage":"Error getting image information: %v","messagePattern":"Error getting image information: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstacktasks/instance.go","lineNumber":432,"sourceCode":"\tclient := t.Cloud.NetworkingClient()\n\n\t_, err := l3floatingip.Update(context.TODO(), client, fi.ValueOf(e.FloatingIP.ID), l3floatingip.UpdateOpts{\n\t\tPortID: e.Port.ID,\n\t}).Extract()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to associated floating IP to instance %s: %v\", *e.Name, err)\n\t}\n\treturn nil\n}\n\nfunc includeBootVolumeOptions(t *openstack.OpenstackAPITarget, e *Instance, opts servers.CreateOpts) (servers.CreateOpts, error) {\n\tif !bootFromVolume(e.Metadata) {\n\t\treturn opts, nil\n\t}\n\n\ti, err := t.Cloud.GetImage(fi.ValueOf(e.Image))\n\tif err != nil {\n\t\treturn servers.CreateOpts{}, fmt.Errorf(\"Error getting image information: %v\", err)\n\t}\n\n\tblockDevice := servers.BlockDevice{\n\t\tBootIndex:           0,\n\t\tDeleteOnTermination: true,\n\t\tDestinationType:     \"volume\",\n\t\tSourceType:          \"image\",\n\t\tUUID:                i.ID,\n\t\tVolumeSize:          i.MinDiskGigabytes,\n\t}\n\n\tif s, ok := e.Metadata[openstack.BOOT_VOLUME_SIZE]; ok {\n\t\ti, err := strconv.ParseInt(s, 10, 64)\n\t\tif err != nil {\n\t\t\treturn servers.CreateOpts{}, fmt.Errorf(\"Invalid value for %v: %v\", openstack.BOOT_VOLUME_SIZE, err)\n\t\t}\n\n\t\tblockDevice.VolumeSize = int(i)","sourceCodeStart":414,"sourceCodeEnd":450,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstacktasks/instance.go#L414-L450","documentation":"Thrown by includeBootVolumeOptions (invoked from RenderOpenstack) when t.Cloud.GetImage fails while resolving the image used to build the boot-from-volume block device mapping. When metadata marks the instance as boot-from-volume, kOps must fetch the image (ID + MinDiskGigabytes) from Glance; any API failure here aborts server creation before the Nova call. This is a wrapper around the underlying gophercloud image error.","triggerScenarios":"Cloud.GetImage(e.Image) errors during a boot-from-volume apply: image name not found in Glance, image ID invalid, 401 auth failure on the image service endpoint, Glance endpoint misconfigured/absent in the catalog, or transient 5xx from the image API.","commonSituations":"Cluster spec references an image name that was deleted or renamed in the region; typos in the image field; operating across regions where the image exists only elsewhere; Glance service endpoint not registered in Keystone catalog; expired token before the image lookup.","solutions":["Verify the image exists: `openstack image list | grep <image>` and correct the image name/ID in the cluster spec","Confirm the glance endpoint is registered: `openstack endpoint list --service image`","Re-authenticate (check OS_* credentials / token expiry) and rerun `kops update cluster`","If the image is private, ensure the project has access or make it shared/public","Retry if the failure was a transient 5xx; check the cloud provider status page"],"exampleFix":"// before\nimage: my-custom-image-v1   # deleted from Glance\n// after\nimage: my-custom-image-v2   # exists: `openstack image list --name my-custom-image-v2`","handlingStrategy":"validation","validationCode":"// resolve the image before entering boot-from-volume path\nfunc resolveImage(t *openstack.OpenstackAPITarget, imageName string) error {\n\t_, err := t.Cloud.GetImage(imageName)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"image %q unresolvable via Glance: %w\", imageName, err)\n\t}\n\treturn nil\n}","typeGuard":"func isImageNotFound(err error) bool {\n\tvar _, nf gophercloud.ErrDefault404\n\treturn errors.As(err, &nf) || strings.Contains(err.Error(), \"No image with a name or ID\")\n}","tryCatchPattern":null,"preventionTips":["Confirm image name/ID with `openstack image list` before referencing it in the cluster spec","Pin images by ID (immutable) rather than name to survive renames","Verify the glance endpoint is in the Keystone service catalog","If the image is private, share it with the project or make it public","Re-authenticate before long applies so the token doesn't expire mid-image-lookup"],"tags":["openstack","glance","boot-from-volume","kops"],"backgroundTag":"image-not-found","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"}