Skip to content

Commit 5d79886

Browse files
authored
Fixes sidecar images in TORC when using imageRegistry
1 parent 9dfed59 commit 5d79886

File tree

4 files changed

+132
-7
lines changed

4 files changed

+132
-7
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ require (
1717
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.14
1818
github.com/cenkalti/backoff/v4 v4.3.0
1919
github.com/container-storage-interface/spec v1.9.0
20+
github.com/distribution/reference v0.6.0
2021
github.com/docker/go-plugins-helpers v0.0.0-20240701071450-45e2431495c8
2122
github.com/dustin/go-humanize v1.0.2-0.20231009183035-961771c7ab99
2223
github.com/elastic/go-sysinfo v1.15.0
@@ -145,6 +146,7 @@ require (
145146
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
146147
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
147148
github.com/oklog/ulid v1.3.1 // indirect
149+
github.com/opencontainers/go-digest v1.0.0 // indirect
148150
github.com/opentracing/opentracing-go v1.2.0 // indirect
149151
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
150152
github.com/pkg/errors v0.9.1 // indirect

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
116116
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
117117
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
118118
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
119+
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
120+
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
119121
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
120122
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
121123
github.com/docker/go-plugins-helpers v0.0.0-20240701071450-45e2431495c8 h1:IMfrF5LCzP2Vhw7j4IIH3HxPsCLuZYjDqFAM/C88ulg=
@@ -286,6 +288,8 @@ github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM
286288
github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
287289
github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
288290
github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
291+
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
292+
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
289293
github.com/openshift/api v0.0.0-20250124212313-a770960d61e0 h1:dCvNfygMrPLVNQ06bpHXrxKfrXHiprO4+etHrRUqI8g=
290294
github.com/openshift/api v0.0.0-20250124212313-a770960d61e0/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
291295
github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs=

operator/controllers/orchestrator/installer/installer.go

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -346,12 +346,18 @@ func (i *Installer) setInstallationParams(
346346
// Images set via environment are considered default
347347
tridentImage = env.GetString(config.TridentImageEnv, TridentImage)
348348
autosupportImage = env.GetString(config.AutosupportImageEnv, commonconfig.DefaultAutosupportImage)
349-
csiSidecarProvisionerImage = env.GetString(config.CSISidecarProvisionerImageEnv, "")
350-
csiSidecarAttacherImage = env.GetString(config.CSISidecarAttacherImageEnv, "")
351-
csiSidecarResizerImage = env.GetString(config.CSISidecarResizerImageEnv, "")
352-
csiSidecarSnapshotterImage = env.GetString(config.CSISidecarSnapshotterImageEnv, "")
353-
csiSidecarNodeDriverRegistrarImage = env.GetString(config.CSISidecarNodeDriverRegistrarImageEnv, "")
354-
csiSidecarLivenessProbeImage = env.GetString(config.CSISidecarLivenessProbeImageEnv, "")
349+
csiSidecarProvisionerImage = env.GetString(config.CSISidecarProvisionerImageEnv,
350+
commonconfig.KubernetesCSISidecarRegistry+"/"+commonconfig.CSISidecarProvisionerImageTag)
351+
csiSidecarAttacherImage = env.GetString(config.CSISidecarAttacherImageEnv,
352+
commonconfig.KubernetesCSISidecarRegistry+"/"+commonconfig.CSISidecarAttacherImageTag)
353+
csiSidecarResizerImage = env.GetString(config.CSISidecarResizerImageEnv,
354+
commonconfig.KubernetesCSISidecarRegistry+"/"+commonconfig.CSISidecarResizerImageTag)
355+
csiSidecarSnapshotterImage = env.GetString(config.CSISidecarSnapshotterImageEnv,
356+
commonconfig.KubernetesCSISidecarRegistry+"/"+commonconfig.CSISidecarSnapshotterImageTag)
357+
csiSidecarNodeDriverRegistrarImage = env.GetString(config.CSISidecarNodeDriverRegistrarImageEnv,
358+
commonconfig.KubernetesCSISidecarRegistry+"/"+commonconfig.CSISidecarNodeDriverRegistrarImageTag)
359+
csiSidecarLivenessProbeImage = env.GetString(config.CSISidecarLivenessProbeImageEnv,
360+
commonconfig.KubernetesCSISidecarRegistry+"/"+commonconfig.CSISidecarLivenessProbeImageTag)
355361

356362
imageRegistry = ""
357363
kubeletDir = DefaultKubeletDir
@@ -451,7 +457,9 @@ func (i *Installer) setInstallationParams(
451457
&csiSidecarLivenessProbeImage,
452458
}
453459
for _, sidecarImage := range sidecarImages {
454-
*sidecarImage = network.ReplaceImageRegistry(*sidecarImage, cr.Spec.ImageRegistry)
460+
if *sidecarImage != "" {
461+
*sidecarImage = network.ReplaceImageRegistry(*sidecarImage, cr.Spec.ImageRegistry)
462+
}
455463
}
456464
}
457465

operator/controllers/orchestrator/installer/installer_test.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ package installer
44

55
import (
66
"fmt"
7+
"strings"
78
"testing"
89

10+
"github.com/distribution/reference"
911
"github.com/ghodss/yaml"
1012
"github.com/google/go-cmp/cmp"
1113
"github.com/stretchr/testify/assert"
@@ -16,6 +18,7 @@ import (
1618

1719
k8sclient "github.com/netapp/trident/cli/k8s_client"
1820
mockExtendedK8sClient "github.com/netapp/trident/mocks/mock_operator/mock_controllers/mock_orchestrator/mock_installer"
21+
"github.com/netapp/trident/operator/config"
1922
netappv1 "github.com/netapp/trident/operator/crd/apis/netapp/v1"
2023
"github.com/netapp/trident/utils/version"
2124
)
@@ -295,3 +298,111 @@ func TestSetInstallationParams_NodePrep(t *testing.T) {
295298
})
296299
}
297300
}
301+
302+
func TestSetInstallationParams_Images(t *testing.T) {
303+
tag := ":v1.2.3"
304+
images := map[string]struct {
305+
image *string
306+
envval string
307+
}{
308+
config.TridentImageEnv: {
309+
&tridentImage,
310+
"test-registry-2/" + strings.ToLower(config.TridentImageEnv) + tag,
311+
},
312+
config.AutosupportImageEnv: {
313+
&autosupportImage,
314+
"test-registry-2/" + strings.ToLower(config.AutosupportImageEnv) + tag,
315+
},
316+
config.CSISidecarProvisionerImageEnv: {
317+
&csiSidecarProvisionerImage,
318+
"test-registry-2/" + strings.ToLower(config.CSISidecarProvisionerImageEnv) + tag,
319+
},
320+
config.CSISidecarAttacherImageEnv: {
321+
&csiSidecarAttacherImage,
322+
"test-registry-2/" + strings.ToLower(config.CSISidecarAttacherImageEnv) + tag,
323+
},
324+
config.CSISidecarResizerImageEnv: {
325+
&csiSidecarResizerImage,
326+
"test-registry-2/" + strings.ToLower(config.CSISidecarResizerImageEnv) + tag,
327+
},
328+
config.CSISidecarSnapshotterImageEnv: {
329+
&csiSidecarSnapshotterImage,
330+
"test-registry-2/" + strings.ToLower(config.CSISidecarSnapshotterImageEnv) + tag,
331+
},
332+
config.CSISidecarNodeDriverRegistrarImageEnv: {
333+
&csiSidecarNodeDriverRegistrarImage,
334+
"test-registry-2/" + strings.ToLower(config.CSISidecarNodeDriverRegistrarImageEnv) + tag,
335+
},
336+
config.CSISidecarLivenessProbeImageEnv: {
337+
&csiSidecarLivenessProbeImage,
338+
"test-registry-2/" + strings.ToLower(config.CSISidecarLivenessProbeImageEnv) + tag,
339+
},
340+
}
341+
tests := []struct {
342+
name string
343+
imageRegistry string
344+
setEnvironment bool
345+
}{
346+
{
347+
name: "default",
348+
},
349+
{
350+
name: "image registry set",
351+
imageRegistry: "test-registry.example.com",
352+
},
353+
{
354+
name: "environment set",
355+
setEnvironment: true,
356+
},
357+
{
358+
name: "environment and image registry set",
359+
imageRegistry: "test-registry.example.com",
360+
setEnvironment: true,
361+
},
362+
}
363+
364+
mockK8sClient := newMockKubeClient(t)
365+
mockK8sClient.EXPECT().ServerVersion().Return(&version.Version{}).AnyTimes()
366+
367+
for _, test := range tests {
368+
t.Run(test.name, func(t *testing.T) {
369+
for _, image := range images {
370+
*image.image = ""
371+
}
372+
373+
to := netappv1.TridentOrchestrator{
374+
TypeMeta: metav1.TypeMeta{},
375+
ObjectMeta: metav1.ObjectMeta{},
376+
Spec: netappv1.TridentOrchestratorSpec{},
377+
Status: netappv1.TridentOrchestratorStatus{},
378+
}
379+
installer := newTestInstaller(mockK8sClient)
380+
381+
if test.setEnvironment {
382+
for env, image := range images {
383+
t.Setenv(env, image.envval)
384+
}
385+
}
386+
387+
to.Spec.ImageRegistry = test.imageRegistry
388+
_, _, _, err := installer.setInstallationParams(to, "")
389+
assert.NoError(t, err)
390+
391+
// Check that all images are valid or empty
392+
for env, image := range images {
393+
_, err := reference.Parse(*image.image)
394+
assert.NoError(t, err, "invalid image %s", *image.image)
395+
396+
if test.setEnvironment {
397+
assert.Contains(t, *image.image, strings.ToLower(env))
398+
assert.True(t, strings.HasSuffix(*image.image, tag))
399+
400+
if test.imageRegistry != "" {
401+
assert.True(t, strings.HasPrefix(*image.image, test.imageRegistry), "invalid image: %s",
402+
*image.image)
403+
}
404+
}
405+
}
406+
})
407+
}
408+
}

0 commit comments

Comments
 (0)