Skip to content

Commit d3281cf

Browse files
Use tmpfs mounts when creating a memory-backed emptyDir volume
Signed-off-by: Andre Marianiello <[email protected]>
1 parent fc3ae73 commit d3281cf

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

pkg/specgen/generate/kube/kube.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,13 @@ func ToSpecGen(ctx context.Context, opts *CtrSpecGenOptions) (*specgen.SpecGener
554554
SubPath: volume.SubPath,
555555
}
556556
s.Volumes = append(s.Volumes, &emptyDirVolume)
557+
case KubeVolumeTypeEmptyDirTmpfs:
558+
memVolume := spec.Mount{
559+
Destination: volume.MountPath,
560+
Type: define.TypeTmpfs,
561+
Source: define.TypeTmpfs,
562+
}
563+
s.Mounts = append(s.Mounts, memVolume)
557564
default:
558565
return nil, errors.New("unsupported volume source type")
559566
}

pkg/specgen/generate/kube/volume.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const (
3434
KubeVolumeTypeCharDevice
3535
KubeVolumeTypeSecret
3636
KubeVolumeTypeEmptyDir
37+
KubeVolumeTypeEmptyDirTmpfs
3738
)
3839

3940
//nolint:revive
@@ -263,7 +264,17 @@ func VolumeFromConfigMap(configMapVolumeSource *v1.ConfigMapVolumeSource, config
263264

264265
// Create a kubeVolume for an emptyDir volume
265266
func VolumeFromEmptyDir(emptyDirVolumeSource *v1.EmptyDirVolumeSource, name string) (*KubeVolume, error) {
266-
return &KubeVolume{Type: KubeVolumeTypeEmptyDir, Source: name}, nil
267+
if emptyDirVolumeSource.Medium == v1.StorageMediumMemory {
268+
return &KubeVolume{
269+
Type: KubeVolumeTypeEmptyDirTmpfs,
270+
Source: name,
271+
}, nil
272+
} else {
273+
return &KubeVolume{
274+
Type: KubeVolumeTypeEmptyDir,
275+
Source: name,
276+
}, nil
277+
}
267278
}
268279

269280
// Create a KubeVolume from one of the supported VolumeSource
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//go:build !remote
2+
3+
package kube
4+
5+
import (
6+
"testing"
7+
8+
v1 "github.com/containers/podman/v4/pkg/k8s.io/api/core/v1"
9+
"github.com/stretchr/testify/assert"
10+
)
11+
12+
func TestVolumeFromEmptyDir(t *testing.T) {
13+
emptyDirSource := v1.EmptyDirVolumeSource{}
14+
emptyDirVol, err := VolumeFromEmptyDir(&emptyDirSource, "emptydir")
15+
assert.NoError(t, err)
16+
assert.Equal(t, emptyDirVol.Type, KubeVolumeTypeEmptyDir)
17+
18+
memEmptyDirSource := v1.EmptyDirVolumeSource{
19+
Medium: v1.StorageMediumMemory,
20+
}
21+
memEmptyDirVol, err := VolumeFromEmptyDir(&memEmptyDirSource, "emptydir")
22+
assert.NoError(t, err)
23+
assert.Equal(t, memEmptyDirVol.Type, KubeVolumeTypeEmptyDirTmpfs)
24+
}

0 commit comments

Comments
 (0)