From 59c342696ea418601e28d1a97cbd28c6feb6c107 Mon Sep 17 00:00:00 2001 From: karlderkaefer Date: Wed, 8 Jan 2025 10:10:06 +0100 Subject: [PATCH] fix: make oci login work --- .gitignore | 1 + charts/benchmark-subchart-level-2a/Chart.yaml | 6 +++- helm_test.go | 4 +-- kube.go | 30 +++++++++++++++++-- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index d8f0a52..0a84e29 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ Chart.lock !./charts k8s-helm-dep-updater dist/ +.DS_Store \ No newline at end of file diff --git a/charts/benchmark-subchart-level-2a/Chart.yaml b/charts/benchmark-subchart-level-2a/Chart.yaml index 3c663ce..078cd97 100644 --- a/charts/benchmark-subchart-level-2a/Chart.yaml +++ b/charts/benchmark-subchart-level-2a/Chart.yaml @@ -36,4 +36,8 @@ dependencies: - name: mysql alias: mysql-bitnami-benchmark-subchart-level-2a version: 12.0.0 - repository: https://charts.bitnami.com/bitnami \ No newline at end of file + repository: https://charts.bitnami.com/bitnami + - name: redis + alias: redis-bitnami-benchmark-subchart-level-2a + version: 20.6.1 + repository: oci://registry-1.docker.io/bitnamicharts \ No newline at end of file diff --git a/helm_test.go b/helm_test.go index 6d5cd70..dbe3cdb 100644 --- a/helm_test.go +++ b/helm_test.go @@ -28,13 +28,13 @@ func TestUpdateDependencies(t *testing.T) { name: "With Refresh", chartPath: "charts/benchmark-subchart-level-1", helmDepsSkipRefresh: false, - expectedNumObjects: 42, + expectedNumObjects: 56, }, { name: "Without Refresh", chartPath: "charts/benchmark-subchart-level-1", helmDepsSkipRefresh: true, - expectedNumObjects: 42, + expectedNumObjects: 56, }, } diff --git a/kube.go b/kube.go index 4b11d58..997ff58 100644 --- a/kube.go +++ b/kube.go @@ -10,6 +10,7 @@ import ( "errors" "fmt" "log" + "net/url" "os" "path/filepath" "strings" @@ -80,6 +81,14 @@ func (d *DefaultStrategy) Logout() error { return nil } +// return the registry hostname in case of oci://hostname we return hostname +func (info *RegistryInfo) GetRegistryHost() string { + if info.EnableOCI { + info.Hostname = GetRegistryHostName(info.Hostname) + } + return info.Hostname +} + // NewRegistryHelper creates a new RegistryHelper // secretNames is a comma separated list of registry secrets func NewRegistryHelper(secretNames string, namespace string, config *HelmUpdateConfig) (*RegistryHelper, error) { @@ -138,9 +147,9 @@ func (r *RegistryHelper) RemoveTempHelmCacheDir() { } // GetRegistry returns the credential protected registry by hostname -func (r *RegistryHelper) GetRegistryByHostname(registry string) *RegistryInfo { +func (r *RegistryHelper) GetRegistryByHostname(registry RegistryInfo) *RegistryInfo { for _, registryInfo := range r.Registries { - if registryInfo.Hostname == registry { + if registryInfo.Hostname == registry.GetRegistryHost() { return registryInfo } } @@ -160,7 +169,7 @@ func (r *RegistryHelper) LoginIfExists(registry *RegistryInfo) error { log.Printf("Registry %s found in helm repos, skipping login", registry.SecretName) return nil } - foundRegistry := r.GetRegistryByHostname(registry.Hostname) + foundRegistry := r.GetRegistryByHostname(*registry) if foundRegistry != nil { action := GetRegistryAction(foundRegistry) log.Printf("Registry %s found in secrets, logging in", foundRegistry.SecretName) @@ -235,6 +244,9 @@ func (r *RegistryHelper) SetRegistriesByLabel() { return } for _, secret := range secrets.Items { + if string(secret.Data["type"]) != "helm" { + continue + } secretName := secret.Name r.Registries[secretName] = &RegistryInfo{ Hostname: string(secret.Data["url"]), @@ -275,3 +287,15 @@ func (r *RegistryHelper) LogoutAll() error { } return nil } + +func GetRegistryHostName(registryUrl string) string { + parsedURL, err := url.Parse(registryUrl) + if parsedURL.Scheme == "" { + return registryUrl + } + if err != nil { + log.Printf("Failed to parse URL: %s", registryUrl) + return "" + } + return parsedURL.Host +}