kubernetes/kops · error

error building nova client: %w

Error message

error building nova client: %w

What it means

buildClients (upup/pkg/fi/cloudup/openstack/cloud.go:402) builds the Nova compute v2 client with openstack.NewComputeV2 and EndpointOpts{Type: "compute", Region: region}; on success it pins Microversion 2.47 because the compute API /servers/detail only returns flavor names from that microversion on. Failure means no compute endpoint for the type+region could be resolved from the Keystone catalog. Wrapped with %w so the gophercloud root error is preserved.

Source

Thrown at upup/pkg/fi/cloudup/openstack/cloud.go:402

	})
	if err != nil {
		return nil, fmt.Errorf("error building cinder client: %w", err)
	}

	neutronClient, err := openstack.NewNetworkV2(provider, gophercloud.EndpointOpts{
		Type:   "network",
		Region: region,
	})
	if err != nil {
		return nil, fmt.Errorf("error building neutron client: %w", err)
	}

	novaClient, err := openstack.NewComputeV2(provider, gophercloud.EndpointOpts{
		Type:   "compute",
		Region: region,
	})
	if err != nil {
		return nil, fmt.Errorf("error building nova client: %w", err)
	}
	// 2.47 is the minimum version where the compute API /server/details returns flavor names
	novaClient.Microversion = "2.47"

	glanceClient, err := openstack.NewImageV2(provider, gophercloud.EndpointOpts{
		Type:   "image",
		Region: region,
	})
	if err != nil {
		return nil, fmt.Errorf("error building glance client: %w", err)
	}

	var dnsClient *gophercloud.ServiceClient
	if hasDNS {
		dnsClient, err = openstack.NewDNSV2(provider, gophercloud.EndpointOpts{
			Type:   "dns",
			Region: region,
		})

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Confirm with `openstack endpoint list --service compute --region <region>` that a compute endpoint exists
  2. Fix OS_REGION_NAME to match a region with Nova deployed
  3. If the endpoint exists but is filtered, check the project's service catalog permissions/interface (public vs internal)
  4. Verify Nova supports microversion >= 2.47 for the flavor-name feature kops relies on
Defensive patterns

Strategy: validation

Validate before calling

endpoints, err := catalogEndpoints(token, "compute")
if err != nil || len(endpoints) == 0 {
    return fmt.Errorf("no compute endpoint for region %q", region)
}
return nil

Prevention

When it happens

Trigger: The catalog lacks a 'compute' endpoint in the region; Nova not deployed there; region string mismatch; the resolved compute endpoint's supported microversions are below 2.47 in downstream checks (the error here specifically is endpoint resolution).

Common situations: Regions without Nova (storage-only regions); typo'd OS_REGION_NAME; custom catalogs where the compute service is registered with an unexpected type; clouds behind restricted catalogs exposing only a subset of services to the project.

Related errors


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