{"record":{"id":"1ac9219cfa2965e3","repo":"kubernetes/kops","slug":"instancegroupvfs-watch-not-implemented-for-vfs-sto","errorCode":null,"errorMessage":"InstanceGroupVFS Watch not implemented for vfs store","messagePattern":"InstanceGroupVFS Watch not implemented for vfs store","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/client/simple/vfsclientset/instancegroup.go","lineNumber":138,"sourceCode":"\n\tvalidation.ValidateInstanceGroup(g, nil, true)\n\terr = c.update(ctx, c.cluster, g)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn g, nil\n}\n\nfunc (c *InstanceGroupVFS) Delete(ctx context.Context, name string, options metav1.DeleteOptions) error {\n\treturn c.delete(ctx, name, options)\n}\n\nfunc (r *InstanceGroupVFS) DeleteCollection(ctx context.Context, options metav1.DeleteOptions, listOptions metav1.ListOptions) error {\n\treturn fmt.Errorf(\"InstanceGroupVFS DeleteCollection not implemented for vfs store\")\n}\n\nfunc (r *InstanceGroupVFS) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {\n\treturn nil, fmt.Errorf(\"InstanceGroupVFS Watch not implemented for vfs store\")\n}\n\nfunc (r *InstanceGroupVFS) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *kopsapi.InstanceGroup, err error) {\n\treturn nil, fmt.Errorf(\"InstanceGroupVFS Patch not implemented for vfs store\")\n}\n","sourceCodeStart":120,"sourceCodeEnd":144,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/client/simple/vfsclientset/instancegroup.go#L120-L144","documentation":"InstanceGroupVFS is a filesystem (VFS) backed read-mostly client for kops InstanceGroups. Watch is a streaming API that the VFS-backed store never implemented, so it unconditionally returns this sentinel error. It signals that watching instance-group changes against a VFS (state-store) backend is not supported, not that a transient failure occurred.","triggerScenarios":"Calling Watch(ctx, opts) on an InstanceGroupVFS client obtained from the simple clientset when the cluster state is stored in a VFS path (S3/GCS/etc. backend via kops state store).","commonSituations":"Controllers or tools ported from typed kubernetes clientsets that rely on watch semantics, running against a kops cluster whose state store is VFS-based instead of the Kubernetes API.","solutions":["Do not use Watch with the VFS-backed clientset; poll List instead (e.g. List on a ticker).","Switch to a clientset backed by the Kubernetes API (kubecfg / API machine) if live watch semantics are required.","Patch InstanceGroupVFS.Watch to implement polling-based watch.Interface if you control the fork."],"exampleFix":"// before\nw, err := igClient.Watch(ctx, metav1.ListOptions{})\n// after\nfor {\n  list, err := igClient.List(ctx, metav1.ListOptions{})\n  if err != nil { return err }\n  process(list)\n  time.Sleep(30 * time.Second)\n}","handlingStrategy":"fallback","validationCode":"// feature-check before using watch on VFS-backed store\nif _, ok := igClient.(interface{ Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) }); ok {\n  // VFS impl always errors; prefer polling\n}","typeGuard":null,"tryCatchPattern":"w, err := igClient.Watch(ctx, opts)\nif err != nil && strings.Contains(err.Error(), \"not implemented\") {\n  return pollLoop(ctx, igClient) // fallback to List polling\n}","preventionTips":["Never assume watch support on VFS-backed clientsets; check docs first.","Build a polling abstraction for state-store-backed listings.","Prefer the Kubernetes API clientset for watch semantics."],"tags":["vfs","watch","unimplemented","instancegroup"],"backgroundTag":"method-not-implemented","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"}