googleapis/mcp-toolbox · error
failed to create ResourceManager projects client for project
Error message
failed to create ResourceManager projects client for project %q: %w
What it means
The final client, the Cloud Resource Manager v3 Projects client, is created with resourcemanager.NewProjectsClient. On failure, all three Dataplex clients are closed and this wrapped error is returned. This client is needed both for GetProject during initialization and for resolving project numbers later.
Source
Thrown at internal/sources/dataplex/dataplex.go:250
dataScanClient, err := dataplexapi.NewDataScanClient(ctx, opts...)
if err != nil {
client.Close()
return nil, nil, nil, nil, fmt.Errorf("failed to create Dataplex DataScan client for project %q: %w", project, err)
}
dataProductClient, err := dataplexapi.NewDataProductClient(ctx, opts...)
if err != nil {
client.Close()
dataScanClient.Close()
return nil, nil, nil, nil, fmt.Errorf("failed to create Dataplex DataProduct client for project %q: %w", project, err)
}
projectsClient, err := resourcemanager.NewProjectsClient(ctx, opts...)
if err != nil {
client.Close()
dataScanClient.Close()
dataProductClient.Close()
return nil, nil, nil, nil, fmt.Errorf("failed to create ResourceManager projects client for project %q: %w", project, err)
}
return client, dataScanClient, dataProductClient, projectsClient, nil
}
func (s *Source) LookupEntry(ctx context.Context, name string, view int, aspectTypes []string, entry string) (*dataplexpb.Entry, error) {
viewMap := map[int]dataplexpb.EntryView{
1: dataplexpb.EntryView_BASIC,
2: dataplexpb.EntryView_FULL,
3: dataplexpb.EntryView_CUSTOM,
4: dataplexpb.EntryView_ALL,
}
req := &dataplexpb.LookupEntryRequest{
Name: name,
View: viewMap[view],
AspectTypes: aspectTypes,
Entry: entry,
}View on GitHub (pinned to 8cc6e09de2)
Solutions
- Verify connectivity to cloudresourcemanager.googleapis.com from the host.
- Retry initialization — three other clients already connected, so this is likely transient.
- Update cloud.google.com/go/resourcemanager to the latest version.
- Check that no per-service endpoint overrides or VPC-SC egress rules block only the Resource Manager domain.
Defensive patterns
Strategy: retry
Validate before calling
curl -sS --max-time 5 https://cloudresourcemanager.googleapis.com/ >/dev/null && echo reachable || echo unreachable
Try / catch
src, err := cfg.Initialize(ctx, tracer)
if err != nil {
if strings.Contains(err.Error(), "failed to create ResourceManager projects client") {
return backoff.Retry(func() error { _, err := cfg.Initialize(ctx, tracer); return err }, backoff.NewExponentialBackOff())
}
return err
} Prevention
- Whitelist cloudresourcemanager.googleapis.com in egress rules/VPC-SC.
- Keep cloud.google.com/go/resourcemanager updated.
- Retry transient failures; check per-service endpoint overrides if only this client fails.
When it happens
Trigger: initDataplexConnection calls resourcemanager.NewProjectsClient(ctx, opts...) after the three Dataplex clients succeed; failure closes all of them and aborts initialization.
Common situations: cloudresourcemanager.googleapis.com unreachable (firewall/proxy); cloud.google.com/go/resourcemanager dependency issues; transient gRPC failures; malformed options shared across all four constructors (though earlier clients succeeding makes this unlikely).
Related errors
- failed to create Dataplex client for project %q: %w
- failed to create Dataplex DataScan client for project %q: %w
- failed to create Dataplex DataProduct client for project %q:
- error listing AlloyDB clusters: %w
- error listing AlloyDB instances: %w
AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05).
Data as JSON: /api/errors/a1f7f3f44bafc0c4.
Report an issue: GitHub.