kubernetes/kops · error

method metal.Cloud::DetachInstance not implemented

Error message

method metal.Cloud::DetachInstance not implemented

What it means

Stub-method error: metal.Cloud.DetachInstance is unimplemented, so detaching a machine (e.g. for detached instance groups) is unsupported on bare metal. Fires when a detach operation is requested against the metal provider.

Source

Thrown at upup/pkg/fi/cloudup/metal/cloud.go:72

// DeleteInstance deletes a cloud instance.
func (c *Cloud) DeleteInstance(instance *cloudinstances.CloudInstance) error {
	return fmt.Errorf("method metal.Cloud::DeleteInstance not implemented")
}

// // DeregisterInstance drains a cloud instance and loadbalancers.
func (c *Cloud) DeregisterInstance(instance *cloudinstances.CloudInstance) error {
	return fmt.Errorf("method metal.Cloud::DeregisterInstance not implemented")
}

// DeleteGroup deletes the cloud resources that make up a CloudInstanceGroup, including the instances.
func (c *Cloud) DeleteGroup(group *cloudinstances.CloudInstanceGroup) error {
	return fmt.Errorf("method metal.Cloud::DeleteGroup not implemented")
}

// DetachInstance causes a cloud instance to no longer be counted against the group's size limits.
func (c *Cloud) DetachInstance(instance *cloudinstances.CloudInstance) error {
	return fmt.Errorf("method metal.Cloud::DetachInstance not implemented")
}

// GetCloudGroups returns a map of cloud instances that back a kops cluster.
// Detached instances must be returned in the NeedUpdate slice.
func (c *Cloud) GetCloudGroups(cluster *kops.Cluster, instancegroups []*kops.InstanceGroup, warnUnmatched bool, nodes []v1.Node) (map[string]*cloudinstances.CloudInstanceGroup, error) {
	groups := make(map[string]*cloudinstances.CloudInstanceGroup)
	for _, ig := range instancegroups {
		cloudInstanceGroup := &cloudinstances.CloudInstanceGroup{
			InstanceGroup: ig,
		}
		groups[ig.ObjectMeta.Name] = cloudInstanceGroup
		for _, node := range nodes {
			isControlPlaneNode := false
			for k := range node.Labels {
				if k == "node-role.kubernetes.io/control-plane" {
					isControlPlaneNode = true
				}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Avoid detached-instance-group flows with the metal provider
  2. Manage machine detachment manually outside kOps
  3. Implement DetachInstance if metal supports it later
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at upup/pkg/fi/cloudup/metal/cloud.go:72 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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