kubernetes/kops · error
building cloud: %w
Error message
building cloud: %w
What it means
Thrown by buildBootstrapData when cloudup.BuildCloud fails to construct the cloud provider interface from the internal kops.Cluster spec (pkg/controllers/clusterapi/kopsconfig_controller.go:214-216). BuildCloud requires the cluster spec to identify a supported cloud provider and to contain the provider-specific configuration (e.g. region for AWS) needed to instantiate a cloud client.
Source
Thrown at pkg/controllers/clusterapi/kopsconfig_controller.go:216
configBuilder.ClusterName = clusterInternal.Name
}
ig := &kops.InstanceGroup{}
{
ig.SetName("placeholder-ig-name") // IG name is not used for nodeup config generation
ig.Spec.Role = kops.InstanceGroupRoleNode
// The machine image is chosen by the CAPI infrastructure provider and is not used for
// nodeup config generation; the placeholder avoids resolving a default from the channel.
ig.Spec.Image = "placeholder-image"
configBuilder.InstanceGroup = ig
configBuilder.InstanceGroupName = ig.Name
}
{
cloud, err := cloudup.BuildCloud(clusterInternal)
if err != nil {
return nil, fmt.Errorf("building cloud: %w", err)
}
configBuilder.Cloud = cloud
}
bootstrapData, err := configBuilder.GetBootstrapData(ctx)
if err != nil {
return nil, fmt.Errorf("building bootstrap data: %w", err)
}
return bootstrapData.NodeupScript, nil
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Verify the Cluster spec's cloudProvider field is set to a supported provider (aws, gce, openstack, etc.) and check the wrapped error for specifics.
- Ensure provider-required fields exist in the cluster spec (e.g. spec.networking type, subnets with correct region/zones).
- Re-apply the Cluster object with a complete, kops-validated spec (validate with kops toolbox or kubectl apply from a kops-generated manifest).
- Confirm the controller binary supports the cloud provider used (check kops version release notes for cluster-api provider support).
- If BuildCloud fails due to missing credentials or API access for the provider, check that the management cluster has valid cloud credentials mounted.
Example fix
// before: Cluster spec missing provider field
spec:
kubernetesVersion: v1.29.0
// after
spec:
cloudProvider: aws
kubernetesVersion: v1.29.0
networkCIDR: 10.0.0.0/16
subnets:
- name: us-east-1a
type: Public
zone: us-east-1a Defensive patterns
Strategy: validation
Validate before calling
// Validate required cluster spec fields before BuildCloud is reachable
if cluster.Spec.CloudProvider == nil || cluster.Spec.CloudProvider.Empty() {
return fmt.Errorf("cluster %s has no cloudProvider set; BuildCloud will fail", cluster.Name)
}
if len(cluster.Spec.Subnets) == 0 {
return fmt.Errorf("cluster %s has no subnets; provider config incomplete", cluster.Name)
} Prevention
- Always set spec.cloudProvider (and provider-specific config like region/networkCIDR) in Cluster objects consumed by the cluster-api controllers.
- Ensure the management cluster has valid cloud credentials so provider clients can initialize.
- Confirm the controller build includes support for the target cloud provider.
- Run kops cluster validation before registering the cluster with CAPI.
- Check conversion output: after scheme conversion, log/assert the internal cluster's provider fields are populated.
When it happens
Trigger: The kops Cluster has no valid spec.provider/cloudConfig (e.g. empty or unrecognized cloud field), required provider settings are missing (e.g. no region/networking config), BuildCloud cannot initialize a cloud client for the provider, or the converted cluster spec is incomplete because upstream conversion dropped fields.
Common situations: A Cluster object created without the cloud provider field populated; a provider unsupported by the kops cluster-api integration; a Cluster spec that lost fields during conversion from a newer schema; cluster spec referencing an invalid region or provider configuration.
Related errors
- converting cluster object: %w
- building bootstrap data: %w
- error identifying node %q: %v
- node identity is required
- did not find owner for node %q
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/e0f5fe5cbc091644.
Report an issue: GitHub.