Skip to content

Commit fba7ac3

Browse files
Default manager image version to provider if not specified
Signed-off-by: alexander-demicev <[email protected]>
1 parent 05d29b5 commit fba7ac3

File tree

3 files changed

+19
-8
lines changed

3 files changed

+19
-8
lines changed

api/v1alpha2/provider_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ type ContainerSpec struct {
184184
// Name of the container. Cannot be updated.
185185
Name string `json:"name"`
186186

187-
// Container Image URL
187+
// Container Image URL. If container is "manager" and version is not specified, it will be set to the provider version.
188188
// +optional
189189
ImageURL *string `json:"imageUrl,omitempty"`
190190

internal/controller/component_customizer.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ func customizeObjectsFn(provider operatorv1.GenericProvider) func(objs []unstruc
8282

8383
providerDeployment := provider.GetSpec().Deployment
8484
providerManager := provider.GetSpec().Manager
85+
providerVersion := provider.GetSpec().Version
8586

8687
// If there are multiple deployments, check if we specify customizations for those deployments.
8788
// We need to skip the deployment customization if there are several deployments available
@@ -107,7 +108,7 @@ func customizeObjectsFn(provider operatorv1.GenericProvider) func(objs []unstruc
107108
providerManager = additionalProviderCustomization.Manager
108109
}
109110

110-
if err := customizeDeployment(providerDeployment, providerManager, d); err != nil {
111+
if err := customizeDeployment(providerDeployment, providerManager, d, providerVersion); err != nil {
111112
return nil, err
112113
}
113114

@@ -124,7 +125,7 @@ func customizeObjectsFn(provider operatorv1.GenericProvider) func(objs []unstruc
124125
}
125126

126127
// customizeDeployment customize provider deployment base on provider spec input.
127-
func customizeDeployment(dSpec *operatorv1.DeploymentSpec, mSpec *operatorv1.ManagerSpec, d *appsv1.Deployment) error {
128+
func customizeDeployment(dSpec *operatorv1.DeploymentSpec, mSpec *operatorv1.ManagerSpec, d *appsv1.Deployment, providerVersion string) error {
128129
// Customize deployment spec first.
129130
if dSpec != nil {
130131
customizeDeploymentSpec(*dSpec, d)
@@ -137,7 +138,7 @@ func customizeDeployment(dSpec *operatorv1.DeploymentSpec, mSpec *operatorv1.Man
137138
return fmt.Errorf("cannot find %q container in deployment %q", managerContainerName, d.Name)
138139
}
139140

140-
customizeManagerContainer(mSpec, container)
141+
customizeManagerContainer(mSpec, container, providerVersion)
141142
}
142143

143144
return nil
@@ -183,7 +184,9 @@ func findManagerContainer(dSpec *appsv1.DeploymentSpec) *corev1.Container {
183184
}
184185

185186
// customizeManagerContainer customize manager container base on provider spec input.
186-
func customizeManagerContainer(mSpec *operatorv1.ManagerSpec, c *corev1.Container) {
187+
func customizeManagerContainer(mSpec *operatorv1.ManagerSpec, c *corev1.Container, providerVersion string) {
188+
c.Image = addImageVersionIfMissing(c.Image, providerVersion)
189+
187190
// ControllerManagerConfigurationSpec fields
188191
if mSpec.Controller != nil {
189192
// TODO can't find an arg for CacheSyncTimeout
@@ -378,3 +381,11 @@ func isMultipleDeployments(objs []unstructured.Unstructured) bool {
378381
func isProviderManagerDeploymentName(name string) bool {
379382
return strings.HasPrefix(name, "ca") && strings.HasSuffix(name, "-controller-manager")
380383
}
384+
385+
func addImageVersionIfMissing(image, version string) string {
386+
if strings.Contains(image, ":") || strings.Contains(image, "@sha256:") {
387+
return image
388+
}
389+
390+
return fmt.Sprintf("%s:%s", image, version)
391+
}

internal/controller/component_customizer_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func TestCustomizeDeployment(t *testing.T) {
5151
Spec: corev1.PodSpec{
5252
Containers: []corev1.Container{{
5353
Name: "manager",
54-
Image: "registry.k8s.io/a-manager:1.6.2",
54+
Image: "registry.k8s.io/a-manager",
5555
Env: []corev1.EnvVar{
5656
{
5757
Name: "test1",
@@ -503,7 +503,7 @@ func TestCustomizeDeployment(t *testing.T) {
503503
Containers: []corev1.Container{
504504
{
505505
Name: "manager",
506-
Image: "registry.k8s.io/a-manager:1.6.2",
506+
Image: "registry.k8s.io/a-manager:v1.6.2",
507507
Env: []corev1.EnvVar{
508508
{
509509
Name: "test1",
@@ -557,7 +557,7 @@ func TestCustomizeDeployment(t *testing.T) {
557557
for _, tc := range tests {
558558
t.Run(tc.name, func(t *testing.T) {
559559
deployment := managerDepl.DeepCopy()
560-
if err := customizeDeployment(tc.inputDeploymentSpec, tc.inputManagerSpec, deployment); err != nil {
560+
if err := customizeDeployment(tc.inputDeploymentSpec, tc.inputManagerSpec, deployment, "v1.6.2"); err != nil {
561561
t.Error(err)
562562
}
563563

0 commit comments

Comments
 (0)