Resolving instance "clusters" not found Error when Using Akuity API
Fixing ListInstanceClusters failures caused by missing InstanceId in Akuity Go API client calls
When calling ListInstanceClusters using the Akuity Go API client, the following error occurs:
panic: getting clusters from akuity: listing instances:rpc error: code = NotFound desc = instance "clusters" not found
This happens even though the OrganizationId and WorkspaceId appear correct.
The error occurs because ListInstanceClusters requires an InstanceId parameter, but it was not provided in the API request.
The API needs to know which Argo CD instance within the workspace you are querying for clusters. Without it, the request is incomplete and results in a “NotFound” error.
To fix this, you must:
-
First call
ListInstancesto retrieve the available Argo CD instances. -
For each instance, call
ListInstanceClustersusing the instance’s ID.
func ListAllClustersFromAllInstances(ctx context.Context, argoClient argocdv1.ArgoCDServiceGatewayClient, orgID, workspaceID string) error {
// First, get all ArgoCD instances
instancesResp, err := argoClient.ListInstances(ctx, &argocdv1.ListInstancesRequest{
OrganizationId: orgID,
WorkspaceId: workspaceID,
})
if err != nil {
return fmt.Errorf("listing instances: %w", err)
}
fmt.Printf("Found %d ArgoCD instances\n\n", len(instancesResp.Instances))
// For each instance, get its clusters
for _, instance := range instancesResp.Instances {
fmt.Printf("=== Instance: %s (ID: %s) ===\n", instance.Name, instance.Id)
clustersResp, err := argoClient.ListInstanceClusters(ctx, &argocdv1.ListInstanceClustersRequest{
OrganizationId: orgID,
InstanceId: instance.Id, // 🔹 Required field!
WorkspaceId: workspaceID,
})
if err != nil {
fmt.Printf("Error getting clusters for instance %s: %v\n", instance.Name, err)
continue
}
fmt.Printf("Found %d clusters:\n", len(clustersResp.Clusters))
for _, cluster := range clustersResp.Clusters {
fmt.Printf(" Cluster: %s (ID: %s)\n", cluster.Name, cluster.Id)
if cluster.Data != nil && len(cluster.Data.Labels) > 0 {
fmt.Print(" Labels: ")
for key, value := range cluster.Data.Labels {
fmt.Printf("%s=%s ", key, value)
}
fmt.Println()
}
if cluster.HealthStatus != nil {
fmt.Printf(" Health: %s\n", cluster.HealthStatus.Status.String())
}
}
fmt.Println()
}
return nil
}