Skip to content

Commit

Permalink
Add volumeMounts field to K8ssandraCluster.spec.medusa
Browse files Browse the repository at this point in the history
  • Loading branch information
lucasvuillier committed Jan 13, 2025
1 parent 3b13a2e commit 8706d92
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 5 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG/CHANGELOG-1.21.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ When cutting a new release, update the `unreleased` heading to the tag being gen
* [BUGFIX] [#1454](https://github.com/k8ssandra/k8ssandra-operator/issues/1454) Do not try to work out backup status if there are no pods
* [BUGFIX] [#1383](https://github.com/k8ssandra/k8ssandra-operator/issues/1383) Do not create MedusaBackup if MedusaBakupJob did not fully succeed
* [BUGFIX] [#1460](https://github.com/k8ssandra/k8ssandra-operator/issues/1460) Fix podName calculations in medusa's hostmap.go to account for unbalanced racks also
* [BUGFIX] [#1466](https://github.com/k8ssandra/k8ssandra-operator/issues/1466) Do not overwrite existing status fields or forget to write the changes. Also, add new ContextName for the Datacenter to know where it used to be.
* [BUGFIX] [#1466](https://github.com/k8ssandra/k8ssandra-operator/issues/1466) Do not overwrite existing status fields or forget to write the changes. Also, add new ContextName for the Datacenter to know where it used to be.
* [ENHANCEMENT] [#1465](https://github.com/k8ssandra/k8ssandra/issues/1465) Add `volumeMounts` option to `K8ssandraCluster.spec.medusa`
4 changes: 4 additions & 0 deletions apis/medusa/v1alpha1/medusa_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,10 @@ type MedusaClusterTemplate struct {
// Provides all storage backend related properties for backups.
StorageProperties Storage `json:"storageProperties,omitempty"`

// Volume mounts for Medusa container.
// +optional
VolumeMounts []corev1.VolumeMount `json:"volumeMounts,omitempty"`

// Certificates for Medusa if client encryption is enabled in Cassandra.
// The secret must be in the same namespace as Cassandra and must contain three keys: "rootca.crt", "client.crt_signed" and "client.key".
// See https://docs.datastax.com/en/developer/python-driver/latest/security/ for more information on the required files.
Expand Down
7 changes: 7 additions & 0 deletions apis/medusa/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 43 additions & 0 deletions charts/k8ssandra-operator/crds/k8ssandra-operator-crds.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26571,6 +26571,49 @@ spec:
Defaults to 50 MB/s.
type: string
type: object
volumeMounts:
description: Volume mounts for Medusa container.
items:
description: VolumeMount describes a mounting of a Volume within
a container.
properties:
mountPath:
description: |-
Path within the container at which the volume should be mounted. Must
not contain ':'.
type: string
mountPropagation:
description: |-
mountPropagation determines how mounts are propagated from the host
to container and the other way around.
When not set, MountPropagationNone is used.
This field is beta in 1.10.
type: string
name:
description: This must match the Name of a Volume.
type: string
readOnly:
description: |-
Mounted read-only if true, read-write otherwise (false or unspecified).
Defaults to false.
type: boolean
subPath:
description: |-
Path within the volume from which the container's volume should be mounted.
Defaults to "" (volume's root).
type: string
subPathExpr:
description: |-
Expanded path within the volume from which the container's volume should be mounted.
Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
Defaults to "" (volume's root).
SubPathExpr and SubPath are mutually exclusive.
type: string
required:
- mountPath
- name
type: object
type: array
type: object
reaper:
description: |-
Expand Down
43 changes: 43 additions & 0 deletions config/crd/bases/k8ssandra.io_k8ssandraclusters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26509,6 +26509,49 @@ spec:
Defaults to 50 MB/s.
type: string
type: object
volumeMounts:
description: Volume mounts for Medusa container.
items:
description: VolumeMount describes a mounting of a Volume within
a container.
properties:
mountPath:
description: |-
Path within the container at which the volume should be mounted. Must
not contain ':'.
type: string
mountPropagation:
description: |-
mountPropagation determines how mounts are propagated from the host
to container and the other way around.
When not set, MountPropagationNone is used.
This field is beta in 1.10.
type: string
name:
description: This must match the Name of a Volume.
type: string
readOnly:
description: |-
Mounted read-only if true, read-write otherwise (false or unspecified).
Defaults to false.
type: boolean
subPath:
description: |-
Path within the volume from which the container's volume should be mounted.
Defaults to "" (volume's root).
type: string
subPathExpr:
description: |-
Expanded path within the volume from which the container's volume should be mounted.
Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
Defaults to "" (volume's root).
SubPathExpr and SubPath are mutually exclusive.
type: string
required:
- mountPath
- name
type: object
type: array
type: object
reaper:
description: |-
Expand Down
11 changes: 7 additions & 4 deletions pkg/medusa/reconcile.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,17 @@ import (
"text/template"

"github.com/adutra/goalesce"
"github.com/go-logr/logr"
cassdcapi "github.com/k8ssandra/cass-operator/apis/cassandra/v1beta1"
k8ss "github.com/k8ssandra/k8ssandra-operator/apis/k8ssandra/v1alpha1"
api "github.com/k8ssandra/k8ssandra-operator/apis/medusa/v1alpha1"
"github.com/k8ssandra/k8ssandra-operator/pkg/cassandra"
"github.com/k8ssandra/k8ssandra-operator/pkg/images"
batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/utils/ptr"

"github.com/go-logr/logr"
"github.com/k8ssandra/k8ssandra-operator/pkg/cassandra"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/ptr"
)

const (
Expand Down Expand Up @@ -323,6 +322,10 @@ func medusaVolumeMounts(dcConfig *cassandra.DatacenterConfig, medusaSpec *api.Me
})
}

if medusaSpec.VolumeMounts != nil {
volumeMounts = append(volumeMounts, medusaSpec.VolumeMounts...)
}

return volumeMounts
}

Expand Down
28 changes: 28 additions & 0 deletions pkg/medusa/reconcile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -706,3 +706,31 @@ func TestPurgeCronJobNameTooLong(t *testing.T) {
_, err := PurgeCronJob(dcConfig, clusterName, namespace, logger)
assert.NotNil(t, err)
}

func TestMedusaVolumeMounts(t *testing.T) {
mountName := "testMount"
mountPath := "/home/cassandra/test-mount"

medusaSpec := &medusaapi.MedusaClusterTemplate{
VolumeMounts: []corev1.VolumeMount{{
Name: mountName,
MountPath: mountPath,
}},
}
dcConfig := cassandra.DatacenterConfig{}
logger := logr.New(logr.Discard().GetSink())

medusaContainer, err := CreateMedusaMainContainer(&dcConfig, medusaSpec, true, "test", logger)
assert.NoError(t, err)
assert.NotEmpty(t, medusaContainer.VolumeMounts)

mountFound := false
for _, mount := range medusaContainer.VolumeMounts {
if mount.Name == mountName && mount.MountPath == mountPath {
mountFound = true
break
}
}

assert.True(t, mountFound)
}

0 comments on commit 8706d92

Please sign in to comment.