Skip to content

Commit dd70168

Browse files
committed
Adding the fix for Helm private charts
1 parent 0b0b7f3 commit dd70168

File tree

1 file changed

+37
-6
lines changed

1 file changed

+37
-6
lines changed

spectrocloud/resource_cluster_profile.go

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -665,14 +665,45 @@ func resolvePackUID(c *client.V1Client, name, tag, registryUID string) (string,
665665
return "", fmt.Errorf("failed to get pack versions for name %s in registry %s: %w", name, registryUID, err)
666666
}
667667

668-
if packVersions == nil || len(packVersions.Tags) == 0 {
669-
return "", fmt.Errorf("no pack found with name %s in registry %s", name, registryUID)
668+
// Path 1: Public registry — has Tags; resolve from Tags only.
669+
if packVersions != nil && len(packVersions.Tags) > 0 {
670+
for _, packTag := range packVersions.Tags {
671+
if packTag.Version == tag {
672+
return packTag.PackUID, nil
673+
}
674+
}
675+
return "", fmt.Errorf("no pack found with name %s, tag %s in registry %s", name, tag, registryUID)
670676
}
671677

672-
// Find the pack with matching tag/version
673-
for _, packTag := range packVersions.Tags {
674-
if packTag.Version == tag {
675-
return packTag.PackUID, nil
678+
// Path 2: Private registry — no Tags; do not use packVersions.Tags. Resolve via list/search.
679+
registryFilter := "spec.registryUid=" + registryUID
680+
packs, listErr := c.GetPacks([]string{registryFilter}, registryUID)
681+
if listErr != nil {
682+
return "", fmt.Errorf("no pack found with name %s in registry %s (list failed: %w)", name, registryUID, listErr)
683+
}
684+
for _, pack := range packs {
685+
if pack.Spec != nil && pack.Spec.Name == name && pack.Spec.Version == tag {
686+
if pack.Metadata != nil && pack.Metadata.UID != "" {
687+
return pack.Metadata.UID, nil
688+
}
689+
}
690+
}
691+
692+
// Fallback: SearchPacks (resolves latest version only when tag matches).
693+
searchFilter := &models.V1PackFilterSpec{
694+
Name: &models.V1FilterString{Eq: StringPtr(name)},
695+
RegistryUID: []string{registryUID},
696+
Type: []*models.V1PackType{
697+
types.Ptr(models.V1PackTypeHelm),
698+
types.Ptr(models.V1PackTypeOci),
699+
},
700+
}
701+
searchResults, searchErr := c.SearchPacks(searchFilter, nil)
702+
if searchErr == nil && len(searchResults) == 1 && searchResults[0].Spec != nil {
703+
for _, reg := range searchResults[0].Spec.Registries {
704+
if reg != nil && reg.UID == registryUID && reg.LatestVersion == tag && reg.LatestPackUID != "" {
705+
return reg.LatestPackUID, nil
706+
}
676707
}
677708
}
678709

0 commit comments

Comments
 (0)