Skip to content

Commit b847de6

Browse files
committed
Fix read_only_fs integ-test (#707)
* Add workaround for cass-config-builder bug, copy all DSE conf files if using readOnlyRootFilesystem
1 parent a56b7ce commit b847de6

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

pkg/reconciliation/construct_podtemplatespec.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,29 @@ func buildInitContainers(dc *api.CassandraDatacenter, rackName string, baseTempl
512512
}
513513

514514
configContainer.VolumeMounts = []corev1.VolumeMount{configBaseMount}
515+
} else if !dc.UseClientImage() && dc.ReadOnlyFs() && dc.Spec.ServerType == "dse" {
516+
// Similar to k8ssandra 1.x, use config-container if we use k8ssandra-client to build configs
517+
if configContainerIndex < 0 {
518+
configContainer = &corev1.Container{
519+
Name: ServerBaseConfigContainerName,
520+
}
521+
}
522+
523+
if configContainer.Image == "" {
524+
serverImage, err := makeImage(dc)
525+
if err != nil {
526+
return err
527+
}
528+
529+
configContainer.Image = serverImage
530+
if images.GetImageConfig() != nil && images.GetImageConfig().ImagePullPolicy != "" {
531+
configContainer.ImagePullPolicy = images.GetImageConfig().ImagePullPolicy
532+
}
533+
534+
configContainer.Command = []string{"/bin/sh"}
535+
configContainer.Args = []string{"-c", "cp -rf /opt/dse/resources/cassandra/conf/* /config/"}
536+
}
537+
configContainer.VolumeMounts = combineVolumeMountSlices(configMounts, configContainer.VolumeMounts)
515538
}
516539

517540
serverCfg.VolumeMounts = combineVolumeMountSlices(configMounts, serverCfg.VolumeMounts)
@@ -555,6 +578,9 @@ func buildInitContainers(dc *api.CassandraDatacenter, rackName string, baseTempl
555578
} else {
556579
baseTemplate.Spec.InitContainers = append(baseTemplate.Spec.InitContainers, *configContainer)
557580
}
581+
} else if !dc.UseClientImage() && configContainerIndex < 0 && dc.ReadOnlyFs() && dc.Spec.ServerType == "dse" {
582+
// Workaround for cass-config-builder, copy missing files before cass-config-builder processes anything
583+
baseTemplate.Spec.InitContainers = append([]corev1.Container{*configContainer}, baseTemplate.Spec.InitContainers...)
558584
}
559585

560586
if serverContainerIndex < 0 {

pkg/reconciliation/construct_podtemplatespec_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2145,8 +2145,9 @@ func TestReadOnlyRootFilesystemVolumeChangesDSE(t *testing.T) {
21452145
assert.NotNil(initContainers, "No init containers were found")
21462146
assert.NoError(err, "Unexpected error encountered")
21472147

2148-
assert.Len(initContainers, 1, "Unexpected number of init containers returned")
2149-
assert.Equal(ServerConfigContainerName, initContainers[0].Name)
2148+
assert.Len(initContainers, 2, "Unexpected number of init containers returned")
2149+
assert.Equal(ServerBaseConfigContainerName, initContainers[0].Name)
2150+
assert.Equal(ServerConfigContainerName, initContainers[1].Name)
21502151

21512152
assert.True(reflect.DeepEqual(initContainers[0].VolumeMounts,
21522153
[]corev1.VolumeMount{
@@ -2156,6 +2157,14 @@ func TestReadOnlyRootFilesystemVolumeChangesDSE(t *testing.T) {
21562157
},
21572158
}), fmt.Sprintf("Unexpected volume mounts for the base config container: %v", initContainers[0].VolumeMounts))
21582159

2160+
assert.True(reflect.DeepEqual(initContainers[1].VolumeMounts,
2161+
[]corev1.VolumeMount{
2162+
{
2163+
Name: "server-config",
2164+
MountPath: "/config",
2165+
},
2166+
}), fmt.Sprintf("Unexpected volume mounts for the base config container: %v", initContainers[0].VolumeMounts))
2167+
21592168
containers := podTemplateSpec.Spec.Containers
21602169
assert.NotNil(containers, "No containers were found")
21612170
assert.NoError(err, "Unexpected error encountered")

tests/smoke_test_read_only_fs/smoke_test_read_only_fs_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,13 @@ var _ = Describe(testName, func() {
6060
ns.WaitForOutputAndLog(step, k, "true", 360)
6161

6262
step = "creating a datacenter resource with 1 rack/1 node"
63-
k = kubectl.ApplyFiles(dcYaml)
63+
64+
testFile, err := ginkgo_util.CreateTestFile(dcYaml)
65+
Expect(err).ToNot(HaveOccurred())
66+
k = kubectl.ApplyFiles(testFile)
6467
ns.ExecAndLog(step, k)
6568

66-
ns.WaitForDatacenterReady(dcName)
69+
ns.WaitForDatacenterReadyWithTimeouts(dcName, 360, 360)
6770
ns.ExpectDoneReconciling(dcName)
6871

6972
step = "deleting the dc"

0 commit comments

Comments
 (0)