kubernetes/kops · error

identifier for cloud %q not implemented

Error message

identifier for cloud %q not implemented

What it means

addNodeController's cloud switch falls through to default when opt.Cloud holds a value that is not one of the implemented providers (aws, gce, openstack, digitalocean, hetzner, azure, scaleway, metal, linode), returning fmt.Errorf("identifier for cloud %q not implemented", opt.Cloud). This guards against typos or unsupported clouds at startup.

Source

Thrown at cmd/kops-controller/main.go:380

		}

	case "metal":
		identifier, err = nodeidentitymetal.New()
		if err != nil {
			return fmt.Errorf("error building metal node identifier: %w", err)
		}

	case "linode":
		identifier, err = nodeidentitylinode.New(opt.CacheNodeidentityInfo)
		if err != nil {
			return fmt.Errorf("error building linode node identifier: %w", err)
		}

	case "":
		return fmt.Errorf("must specify cloud")

	default:
		return fmt.Errorf("identifier for cloud %q not implemented", opt.Cloud)
	}

	nodeController, err := controllers.NewNodeReconciler(mgr, identifier)
	if err != nil {
		return err
	}
	if err := nodeController.SetupWithManager(mgr); err != nil {
		return err
	}

	return nil
}

// Reconciler is the interface for a standard Reconciler.
type Reconciler interface {
	SetupWithManager(mgr manager.Manager) error
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check the exact value passed via --cloud/CLOUD and correct spelling/case to one of: aws, gce, openstack, digitalocean, hetzner, azure, scaleway, metal, linode
  2. Confirm your kOps version supports the cloud; upgrade kops-controller if the provider was added later
  3. Match the cloud value to the one used at cluster creation (kops get cluster output)

Example fix

// before
--cloud=AWS
// after
--cloud=aws
Defensive patterns

Strategy: validation

Validate before calling

// validate the cloud value against supported providers before launch
var supported = map[string]bool{
	"aws": true, "gce": true, "openstack": true, "digitalocean": true,
	"hetzner": true, "azure": true, "scaleway": true, "metal": true, "linode": true,
}
if !supported[opt.Cloud] {
	log.Error(nil, "unsupported cloud", "cloud", opt.Cloud)
	os.Exit(2)
}

Try / catch

if err := addNodeController(context, opt); err != nil {
	log.Error(err, "failed to add node controller")
	os.Exit(1)
}

Prevention

When it happens

Trigger: Running kops-controller with --cloud set to an unsupported or misspelled value, e.g. --cloud=AWS (case mismatch), --cloud=vmware, --cloud=openstack-nova, or a provider added in a newer kOps than the deployed binary.

Common situations: Typo or wrong casing in the cloud flag; using a cloud provider not yet supported by kops-controller; running an older kOps binary that lacks a newly added provider (e.g. scaleway, metal, linode).

Related errors


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