Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions internal/images/merge.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package images

import (
"os"

"github.com/imdario/mergo"
"sigs.k8s.io/yaml"
)

const pullSecretEnvVar = "SKR_IMG_PULL_SECRET"

// MergeHubConfiguration merges the Istio hub configuration to the provided manifest.
func MergeHubConfiguration(manifest []byte, istioImagesHub string) ([]byte, error) {
var templateMap map[string]interface{}
Expand All @@ -24,3 +28,58 @@ func MergeHubConfiguration(manifest []byte, istioImagesHub string) ([]byte, erro

return yaml.Marshal(templateMap)
}

func MergePullSecretEnv(manifest []byte) ([]byte, error) {
secret, pullSecretEnvExists := os.LookupEnv(pullSecretEnvVar)
if !pullSecretEnvExists {
return manifest, nil
}

var templateMap map[string]interface{}
_ = yaml.Unmarshal(manifest, &templateMap)

spec := ensureMap(templateMap, "spec")
values := ensureMap(spec, "values")
global := ensureMap(values, "global")

ips, ok := global["imagePullSecrets"].([]interface{})
if !ok {
ips = []interface{}{}
}

secretName := secret
already := false
for _, v := range ips {
if v == secretName {
already = true
break
}
}
if !already {
ips = append(ips, secretName)
}

global["imagePullSecrets"] = ips

out, err := yaml.Marshal(templateMap)
if err != nil {
return nil, err
}

return out, nil
}

func ensureMap(m map[string]interface{}, key string) map[string]interface{} {
v, ok := m[key]
if !ok {
nm := map[string]interface{}{}
m[key] = nm
return nm
}
nm, ok := v.(map[string]interface{})
if !ok {
nm = map[string]interface{}{}
m[key] = nm
}
return nm
}
6 changes: 5 additions & 1 deletion internal/istiooperator/merge.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@ func (m *IstioMerger) Merge(clusterSize clusterconfig.ClusterSize, istioCR *oper
if err != nil {
return "", err
}
iopWithOverrides, err := clusterconfig.MergeOverrides(manifestWithOverrideImagesHub, overrides)
manifestWithOverridePullSecret, err := images.MergePullSecretEnv(manifestWithOverrideImagesHub)
if err != nil {
return "", err
}
iopWithOverrides, err := clusterconfig.MergeOverrides(manifestWithOverridePullSecret, overrides)
if err != nil {
return "", err
}
Expand Down
6 changes: 5 additions & 1 deletion internal/istiooperator/merge_experimental.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,11 @@ func (m *IstioMerger) Merge(clusterSize clusterconfig.ClusterSize, istioCR *oper
if err != nil {
return "", err
}
iopWithOverrides, err := clusterconfig.MergeOverrides(manifestWithOverrideImagesHub, overrides)
manifestWithOverridePullSecret, err := images.MergePullSecretEnv(manifestWithOverrideImagesHub)
if err != nil {
return "", err
}
iopWithOverrides, err := clusterconfig.MergeOverrides(manifestWithOverridePullSecret, overrides)
if err != nil {
return "", err
}
Expand Down
Loading