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
6 changes: 6 additions & 0 deletions deploy/crds/tridentorchestrator_cr_customimage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,9 @@ spec:
debug: true
namespace: trident
tridentImage: localhost:5000/netapp/trident:26.06
csiSidecarProvisionerImage: localhost:5000/sig-storage/csi-provisioner:v6.3.0
csiSidecarAttacherImage: localhost:5000/sig-storage/csi-attacher:v4.11.0
csiSidecarResizerImage: localhost:5000/sig-storage/csi-resizer:v2.1.0
csiSidecarSnapshotterImage: localhost:5000/sig-storage/csi-snapshotter:v8.6.0
csiSidecarNodeDriverRegistrarImage: localhost:5000/sig-storage/csi-node-driver-registrar:v2.17.0
csiSidecarLivenessProbeImage: localhost:5000/sig-storage/livenessprobe:v2.19.0
18 changes: 18 additions & 0 deletions helm/trident-operator/templates/tridentorchestrator.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,24 @@ spec:
{{- if .Values.imageRegistry }}
imageRegistry: {{ .Values.imageRegistry }}
{{- end }}
{{- if .Values.csiSidecarProvisionerImage }}
csiSidecarProvisionerImage: {{ .Values.csiSidecarProvisionerImage }}
{{- end }}
{{- if .Values.csiSidecarAttacherImage }}
csiSidecarAttacherImage: {{ .Values.csiSidecarAttacherImage }}
{{- end }}
{{- if .Values.csiSidecarResizerImage }}
csiSidecarResizerImage: {{ .Values.csiSidecarResizerImage }}
{{- end }}
{{- if .Values.csiSidecarSnapshotterImage }}
csiSidecarSnapshotterImage: {{ .Values.csiSidecarSnapshotterImage }}
{{- end }}
{{- if .Values.csiSidecarNodeDriverRegistrarImage }}
csiSidecarNodeDriverRegistrarImage: {{ .Values.csiSidecarNodeDriverRegistrarImage }}
{{- end }}
{{- if .Values.csiSidecarLivenessProbeImage }}
csiSidecarLivenessProbeImage: {{ .Values.csiSidecarLivenessProbeImage }}
{{- end }}
kubeletDir: {{ .Values.kubeletDir }}
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
Expand Down
18 changes: 18 additions & 0 deletions helm/trident-operator/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,24 @@ tridentImage: ""
# tridentImageTag allows overriding the tag of the image for Trident.
tridentImageTag: ""

# csiSidecarProvisionerImage allows the complete override of the CSI provisioner sidecar image.
csiSidecarProvisionerImage: ""

# csiSidecarAttacherImage allows the complete override of the CSI attacher sidecar image.
csiSidecarAttacherImage: ""

# csiSidecarResizerImage allows the complete override of the CSI resizer sidecar image.
csiSidecarResizerImage: ""

# csiSidecarSnapshotterImage allows the complete override of the CSI snapshotter sidecar image.
csiSidecarSnapshotterImage: ""

# csiSidecarNodeDriverRegistrarImage allows the complete override of the CSI node-driver-registrar sidecar image.
csiSidecarNodeDriverRegistrarImage: ""

# csiSidecarLivenessProbeImage allows the complete override of the CSI liveness probe sidecar image.
csiSidecarLivenessProbeImage: ""

# (Deprecated) tridentEnableNodePrep attempts to automatically install required packages on nodes.
tridentEnableNodePrep: false

Expand Down
95 changes: 60 additions & 35 deletions operator/controllers/orchestrator/installer/installer.go
Original file line number Diff line number Diff line change
Expand Up @@ -726,6 +726,25 @@ func (i *Installer) setInstallationParams(
}
}

if cr.Spec.CSISidecarProvisionerImage != "" {
csiSidecarProvisionerImage = cr.Spec.CSISidecarProvisionerImage
}
if cr.Spec.CSISidecarAttacherImage != "" {
csiSidecarAttacherImage = cr.Spec.CSISidecarAttacherImage
}
if cr.Spec.CSISidecarResizerImage != "" {
csiSidecarResizerImage = cr.Spec.CSISidecarResizerImage
}
if cr.Spec.CSISidecarSnapshotterImage != "" {
csiSidecarSnapshotterImage = cr.Spec.CSISidecarSnapshotterImage
}
if cr.Spec.CSISidecarNodeDriverRegistrarImage != "" {
csiSidecarNodeDriverRegistrarImage = cr.Spec.CSISidecarNodeDriverRegistrarImage
}
if cr.Spec.CSISidecarLivenessProbeImage != "" {
csiSidecarLivenessProbeImage = cr.Spec.CSISidecarLivenessProbeImage
}

// Setting up the resources
if returnError = i.populateResources(cr); returnError != nil {
return nil, nil, false, fmt.Errorf("failed parsing resources list specified: \n%w", returnError)
Expand Down Expand Up @@ -1033,41 +1052,47 @@ func (i *Installer) InstallOrPatchTrident(
acpVersion := i.GetACPVersion()

identifiedSpecValues := netappv1.TridentOrchestratorSpecValues{
EnableForceDetach: strconv.FormatBool(enableForceDetach),
DisableAuditLog: strconv.FormatBool(disableAuditLog),
LogFormat: logFormat,
Debug: strconv.FormatBool(debug),
LogLevel: determineLogLevel(),
LogWorkflows: logWorkflows,
LogLayers: logLayers,
TridentImage: tridentImage,
ImageRegistry: imageRegistry,
IPv6: strconv.FormatBool(useIPv6),
SilenceAutosupport: strconv.FormatBool(silenceAutosupport),
ProbePort: probePort,
AutosupportImage: autosupportImage,
AutosupportProxy: autosupportProxy,
AutosupportInsecure: autosupportInsecure,
AutosupportSerialNumber: autosupportSerialNumber,
AutosupportHostname: autosupportHostname,
KubeletDir: kubeletDir,
K8sTimeout: strconv.Itoa(int(k8sTimeout.Seconds())),
HTTPRequestTimeout: httpTimeout,
ImagePullSecrets: imagePullSecrets,
NodePluginNodeSelector: nodePluginNodeSelector,
NodePluginTolerations: nodePluginTolerations,
ImagePullPolicy: imagePullPolicy,
EnableACP: strconv.FormatBool(enableACP),
ACPImage: acpImage,
ISCSISelfHealingInterval: iscsiSelfHealingInterval,
ISCSISelfHealingWaitTime: iscsiSelfHealingWaitTime,
K8sAPIQPS: k8sAPIQPS,
FSGroupPolicy: fsGroupPolicy,
NodePrep: nodePrep,
EnableConcurrency: strconv.FormatBool(enableConcurrency),
Resources: resourcesValues,
HTTPSMetrics: strconv.FormatBool(httpsMetrics),
HostNetwork: hostNetwork,
EnableForceDetach: strconv.FormatBool(enableForceDetach),
DisableAuditLog: strconv.FormatBool(disableAuditLog),
LogFormat: logFormat,
Debug: strconv.FormatBool(debug),
LogLevel: determineLogLevel(),
LogWorkflows: logWorkflows,
LogLayers: logLayers,
TridentImage: tridentImage,
ImageRegistry: imageRegistry,
CSISidecarProvisionerImage: csiSidecarProvisionerImage,
CSISidecarAttacherImage: csiSidecarAttacherImage,
CSISidecarResizerImage: csiSidecarResizerImage,
CSISidecarSnapshotterImage: csiSidecarSnapshotterImage,
CSISidecarNodeDriverRegistrarImage: csiSidecarNodeDriverRegistrarImage,
CSISidecarLivenessProbeImage: csiSidecarLivenessProbeImage,
IPv6: strconv.FormatBool(useIPv6),
SilenceAutosupport: strconv.FormatBool(silenceAutosupport),
ProbePort: probePort,
AutosupportImage: autosupportImage,
AutosupportProxy: autosupportProxy,
AutosupportInsecure: autosupportInsecure,
AutosupportSerialNumber: autosupportSerialNumber,
AutosupportHostname: autosupportHostname,
KubeletDir: kubeletDir,
K8sTimeout: strconv.Itoa(int(k8sTimeout.Seconds())),
HTTPRequestTimeout: httpTimeout,
ImagePullSecrets: imagePullSecrets,
NodePluginNodeSelector: nodePluginNodeSelector,
NodePluginTolerations: nodePluginTolerations,
ImagePullPolicy: imagePullPolicy,
EnableACP: strconv.FormatBool(enableACP),
ACPImage: acpImage,
ISCSISelfHealingInterval: iscsiSelfHealingInterval,
ISCSISelfHealingWaitTime: iscsiSelfHealingWaitTime,
K8sAPIQPS: k8sAPIQPS,
FSGroupPolicy: fsGroupPolicy,
NodePrep: nodePrep,
EnableConcurrency: strconv.FormatBool(enableConcurrency),
Resources: resourcesValues,
HTTPSMetrics: strconv.FormatBool(httpsMetrics),
HostNetwork: hostNetwork,
}

Log().WithFields(LogFields{
Expand Down
42 changes: 42 additions & 0 deletions operator/controllers/orchestrator/installer/installer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,48 @@ func TestSetInstallationParams_Images(t *testing.T) {
}
})
}

t.Run("CR sidecar images override environment and image registry", func(t *testing.T) {
for _, image := range images {
*image.image = ""
}
for env, image := range images {
t.Setenv(env, image.envval)
}

expectedProvisionerImage := "cr-registry.example.com/sig-storage/csi-provisioner:v9.9.9"
expectedAttacherImage := "cr-registry.example.com/sig-storage/csi-attacher:v9.9.9"
expectedResizerImage := "cr-registry.example.com/sig-storage/csi-resizer:v9.9.9"
expectedSnapshotterImage := "cr-registry.example.com/sig-storage/csi-snapshotter:v9.9.9"
expectedRegistrarImage := "cr-registry.example.com/sig-storage/csi-node-driver-registrar:v9.9.9"
expectedLivenessProbeImage := "cr-registry.example.com/sig-storage/livenessprobe:v9.9.9"

to := netappv1.TridentOrchestrator{
TypeMeta: metav1.TypeMeta{},
ObjectMeta: metav1.ObjectMeta{},
Spec: netappv1.TridentOrchestratorSpec{
ImageRegistry: "registry-from-cr.example.com",
CSISidecarProvisionerImage: expectedProvisionerImage,
CSISidecarAttacherImage: expectedAttacherImage,
CSISidecarResizerImage: expectedResizerImage,
CSISidecarSnapshotterImage: expectedSnapshotterImage,
CSISidecarNodeDriverRegistrarImage: expectedRegistrarImage,
CSISidecarLivenessProbeImage: expectedLivenessProbeImage,
},
Status: netappv1.TridentOrchestratorStatus{},
}
installer := newTestInstaller(mockK8sClient)

_, _, _, err := installer.setInstallationParams(to, "")
assert.NoError(t, err)

assert.Equal(t, expectedProvisionerImage, csiSidecarProvisionerImage)
assert.Equal(t, expectedAttacherImage, csiSidecarAttacherImage)
assert.Equal(t, expectedResizerImage, csiSidecarResizerImage)
assert.Equal(t, expectedSnapshotterImage, csiSidecarSnapshotterImage)
assert.Equal(t, expectedRegistrarImage, csiSidecarNodeDriverRegistrarImage)
assert.Equal(t, expectedLivenessProbeImage, csiSidecarLivenessProbeImage)
})
}

func TestSetInstallationParams_FSGroupPolicy(t *testing.T) {
Expand Down
Loading