diff --git a/.github/workflows/kindIntegTest.yml b/.github/workflows/kindIntegTest.yml index 1ae917a3..08d3d3f5 100644 --- a/.github/workflows/kindIntegTest.yml +++ b/.github/workflows/kindIntegTest.yml @@ -95,6 +95,7 @@ jobs: with: integration_test: ${{ matrix.integration_test }} - name: Archive k8s logs + if: always() uses: actions/upload-artifact@v4 with: name: k8s-logs-smoke_test-${{ matrix.version }} diff --git a/pkg/reconciliation/construct_podtemplatespec.go b/pkg/reconciliation/construct_podtemplatespec.go index a581d5db..61f7de22 100644 --- a/pkg/reconciliation/construct_podtemplatespec.go +++ b/pkg/reconciliation/construct_podtemplatespec.go @@ -555,6 +555,31 @@ func buildInitContainers(dc *api.CassandraDatacenter, rackName string, baseTempl } else { baseTemplate.Spec.InitContainers = append(baseTemplate.Spec.InitContainers, *configContainer) } + } else if !dc.UseClientImage() && configContainerIndex < 0 && dc.ReadOnlyFs() && dc.Spec.ServerType == "dse" { + // Workaround for cass-config-builder, copy missing files + configContainer = &corev1.Container{ + Name: ServerBaseConfigContainerName, + } + + if configContainer.Image == "" { + serverImage, err := makeImage(dc) + if err != nil { + return err + } + + configContainer.Image = serverImage + if images.GetImageConfig() != nil && images.GetImageConfig().ImagePullPolicy != "" { + configContainer.ImagePullPolicy = images.GetImageConfig().ImagePullPolicy + } + + configContainer.Command = []string{"/bin/sh"} + configContainer.Args = []string{"-c", "cp -rf /opt/dse/resources/cassandra/conf/jvm-dependent.sh /config/"} + + configContainer.VolumeMounts = combineVolumeMountSlices(configMounts, configContainer.VolumeMounts) + } + baseTemplate.Spec.InitContainers = append(baseTemplate.Spec.InitContainers, *serverCfg) + serverContainerIndex = len(baseTemplate.Spec.InitContainers) - 1 + baseTemplate.Spec.InitContainers = append(baseTemplate.Spec.InitContainers, *configContainer) } if serverContainerIndex < 0 { diff --git a/pkg/reconciliation/construct_podtemplatespec_test.go b/pkg/reconciliation/construct_podtemplatespec_test.go index 7335d675..96ec7a3c 100644 --- a/pkg/reconciliation/construct_podtemplatespec_test.go +++ b/pkg/reconciliation/construct_podtemplatespec_test.go @@ -2145,8 +2145,9 @@ func TestReadOnlyRootFilesystemVolumeChangesDSE(t *testing.T) { assert.NotNil(initContainers, "No init containers were found") assert.NoError(err, "Unexpected error encountered") - assert.Len(initContainers, 1, "Unexpected number of init containers returned") + assert.Len(initContainers, 2, "Unexpected number of init containers returned") assert.Equal(ServerConfigContainerName, initContainers[0].Name) + assert.Equal(ServerBaseConfigContainerName, initContainers[1].Name) assert.True(reflect.DeepEqual(initContainers[0].VolumeMounts, []corev1.VolumeMount{ @@ -2156,6 +2157,14 @@ func TestReadOnlyRootFilesystemVolumeChangesDSE(t *testing.T) { }, }), fmt.Sprintf("Unexpected volume mounts for the base config container: %v", initContainers[0].VolumeMounts)) + assert.True(reflect.DeepEqual(initContainers[1].VolumeMounts, + []corev1.VolumeMount{ + { + Name: "server-config", + MountPath: "/config", + }, + }), fmt.Sprintf("Unexpected volume mounts for the base config container: %v", initContainers[0].VolumeMounts)) + containers := podTemplateSpec.Spec.Containers assert.NotNil(containers, "No containers were found") assert.NoError(err, "Unexpected error encountered") diff --git a/tests/smoke_test_read_only_fs/smoke_test_read_only_fs_test.go b/tests/smoke_test_read_only_fs/smoke_test_read_only_fs_test.go index 2663cfb7..65482264 100644 --- a/tests/smoke_test_read_only_fs/smoke_test_read_only_fs_test.go +++ b/tests/smoke_test_read_only_fs/smoke_test_read_only_fs_test.go @@ -66,7 +66,7 @@ var _ = Describe(testName, func() { k = kubectl.ApplyFiles(testFile) ns.ExecAndLog(step, k) - ns.WaitForDatacenterReady(dcName) + ns.WaitForDatacenterReadyWithTimeouts(dcName, 360, 360) ns.ExpectDoneReconciling(dcName) step = "deleting the dc"