diff --git a/api/v1alpha1/backstage_types.go b/api/v1alpha1/backstage_types.go index 6e9d2098..9c09e822 100644 --- a/api/v1alpha1/backstage_types.go +++ b/api/v1alpha1/backstage_types.go @@ -180,7 +180,7 @@ type Env struct { type RuntimeConfig struct { // Name of ConfigMap containing Backstage runtime objects configuration BackstageConfigName string `json:"backstageConfig,omitempty"` - // Name of ConfigMap containing LocalDb (P|ostgreSQL) runtime objects configuration + // Name of ConfigMap containing LocalDb (PostgreSQL) runtime objects configuration LocalDbConfigName string `json:"localDbConfig,omitempty"` } diff --git a/controllers/backstage_controller_test.go b/controllers/backstage_controller_test.go index f9550cbd..e8d04c53 100644 --- a/controllers/backstage_controller_test.go +++ b/controllers/backstage_controller_test.go @@ -490,14 +490,23 @@ spec: app: bs1 spec: containers: - - name: bs1 + - name: backstage-backend + image: busybox + - name: sidecar + image: busybox + initContainers: + - name: install-dynamic-plugins image: busybox `, }) err := k8sClient.Create(ctx, backstageConfigMap) Expect(err).To(Not(HaveOccurred())) + img := "backstage" backstage = buildBackstageCR(bsv1alpha1.BackstageSpec{ + Application: &bsv1alpha1.Application{ + Image: &img, + }, RawRuntimeConfig: bsv1alpha1.RuntimeConfig{ BackstageConfigName: backstageConfigMap.Name, }, @@ -523,7 +532,21 @@ spec: By("Checking if Deployment was successfully created in the reconciliation") Eventually(func() error { found := &appsv1.Deployment{} - return k8sClient.Get(ctx, types.NamespacedName{Namespace: ns, Name: getDefaultObjName(*backstage)}, found) + if err := k8sClient.Get(ctx, types.NamespacedName{Namespace: ns, Name: getDefaultObjName(*backstage)}, found); err != nil { + return err + } + Expect(len(found.Spec.Template.Spec.Containers)).To(Equal(2)) + for i, c := range found.Spec.Template.Spec.Containers { + if c.Name == _defaultBackstageMainContainerName { + Expect(found.Spec.Template.Spec.Containers[i].Image).To(Equal("backstage")) + } else { + Expect(found.Spec.Template.Spec.Containers[i].Image).To(Equal("busybox")) + } + } + Expect(len(found.Spec.Template.Spec.InitContainers)).To(Equal(1)) + Expect(found.Spec.Template.Spec.InitContainers[0].Image).To(Equal("backstage")) + + return nil }, time.Minute, time.Second).Should(Succeed()) By("Checking the latest Status added to the Backstage instance") @@ -1315,7 +1338,9 @@ plugins: [] By("Checking that the image was set on all containers in the Pod Spec") visitContainers(&found.Spec.Template, func(container *corev1.Container) { By(fmt.Sprintf("Checking Image in the Backstage Deployment - container: %q", container.Name), func() { - Expect(container.Image).Should(Equal(imageName)) + if container.Name == _defaultBackstageMainContainerName || container.Name == _defaultBackstageInitContainerName { + Expect(container.Image).Should(Equal(imageName)) + } }) }) diff --git a/controllers/backstage_deployment.go b/controllers/backstage_deployment.go index 6a02d382..8c3d24d1 100644 --- a/controllers/backstage_deployment.go +++ b/controllers/backstage_deployment.go @@ -195,10 +195,7 @@ func (r *BackstageReconciler) validateAndUpdatePsqlSecretRef(backstage bs.Backst func (r *BackstageReconciler) setDefaultDeploymentImage(deployment *appsv1.Deployment) { if envBackstageImage != "" { - visitContainers(&deployment.Spec.Template, func(container *v1.Container) { - container.Image = envBackstageImage - - }) + setBackstageImage(deployment, envBackstageImage) } } @@ -212,9 +209,7 @@ func (r *BackstageReconciler) applyApplicationParamsFromCR(backstage bs.Backstag if backstage.Spec.Application != nil { deployment.Spec.Replicas = backstage.Spec.Application.Replicas if backstage.Spec.Application.Image != nil { - visitContainers(&deployment.Spec.Template, func(container *v1.Container) { - container.Image = *backstage.Spec.Application.Image - }) + setBackstageImage(deployment, *backstage.Spec.Application.Image) } if backstage.Spec.Application.ImagePullSecrets != nil { // use image pull secrets from the CR spec deployment.Spec.Template.Spec.ImagePullSecrets = nil @@ -236,3 +231,11 @@ func getDefaultObjName(backstage bs.Backstage) string { func getDefaultDbObjName(backstage bs.Backstage) string { return fmt.Sprintf("backstage-psql-%s", backstage.Name) } + +func setBackstageImage(deployment *appsv1.Deployment, imageName string) { + visitContainers(&deployment.Spec.Template, func(container *v1.Container) { + if container.Name == _defaultBackstageMainContainerName || container.Name == _defaultBackstageInitContainerName { + container.Image = imageName + } + }) +}