kubernetes/kops · error

InstanceGroupVFS Patch not implemented for vfs store

Error message

InstanceGroupVFS Patch not implemented for vfs store

What it means

The VFS-backed InstanceGroup client does not implement the Kubernetes-style Patch operation; the method always returns this error. Patching requires server-side apply/merge semantics the plain file store cannot provide. Use Update (read-modify-write) instead.

Source

Thrown at pkg/client/simple/vfsclientset/instancegroup.go:142

		return nil, err
	}
	return g, nil
}

func (c *InstanceGroupVFS) Delete(ctx context.Context, name string, options metav1.DeleteOptions) error {
	return c.delete(ctx, name, options)
}

func (r *InstanceGroupVFS) DeleteCollection(ctx context.Context, options metav1.DeleteOptions, listOptions metav1.ListOptions) error {
	return fmt.Errorf("InstanceGroupVFS DeleteCollection not implemented for vfs store")
}

func (r *InstanceGroupVFS) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) {
	return nil, fmt.Errorf("InstanceGroupVFS Watch not implemented for vfs store")
}

func (r *InstanceGroupVFS) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *kopsapi.InstanceGroup, err error) {
	return nil, fmt.Errorf("InstanceGroupVFS Patch not implemented for vfs store")
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Replace Patch with Get followed by modifying the field and Update to persist changes.
  2. Perform patches through the Kubernetes API server (kops rolling-update / kubectl) instead of the VFS clientset.
  3. Implement Patch in InstanceGroupVFS as read-modify-apply-update if you own the code.

Example fix

// before
ig, err := client.Patch(ctx, "nodes", types.StrategicMergePatchType, data, metav1.PatchOptions{})
// after
ig, err := client.Get(ctx, "nodes", metav1.GetOptions{})
if err != nil { return err }
ig.Spec.MachineType = "m5.large"
_, err = client.Update(ctx, ig, metav1.UpdateOptions{})
Defensive patterns

Strategy: fallback

Validate before calling

// avoid patch paths entirely on VFS stores
const vfsSupportsPatch = false
if vfsSupportsPatch { /* never */ }

Try / catch

result, err := igClient.Patch(ctx, name, pt, data, opts)
if err != nil && strings.Contains(err.Error(), "not implemented") {
  return getModifyUpdate(ctx, igClient, name, data)
}

Prevention

When it happens

Trigger: Calling Patch(ctx, name, patchType, data, opts, subresources...) on InstanceGroupVFS against a VFS state store.

Common situations: Tools using strategic-merge or JSON patch calls generated from client-go interfaces; automation that patches instance-group specs (e.g. updating node counts) via the VFS clientset.

Related errors


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/0dbcdfc4bf8d6fe1. Report an issue: GitHub.