feat: add support for sysctls compose key (#239)

* feat: add support for `sysctls` compose key

* lint

---------

Co-authored-by: Pasha Sviderski <me@psviderski.name>
This commit is contained in:
Andrey Viktorov
2026-01-10 15:53:56 +11:00
committed by GitHub
co-authored by Pasha Sviderski
parent 7e739dd2f0
commit 06c3fba96e
8 changed files with 49 additions and 8 deletions
+15 -8
View File
@@ -247,6 +247,8 @@ type ContainerSpec struct {
PullPolicy string
// Resource allocation for the container.
Resources ContainerResources
// Namespaced kernel parameters to be set in container
Sysctls map[string]string
// User overrides the default user of the image used to run the container. Format: user|UID[:group|GID].
User string
// VolumeMounts specifies how volumes are mounted into the container filesystem.
@@ -312,6 +314,14 @@ func (s *ContainerSpec) Equals(spec ContainerSpec) bool {
func (s *ContainerSpec) Clone() ContainerSpec {
spec := *s
if s.CapAdd != nil {
spec.CapAdd = make([]string, len(s.CapAdd))
copy(spec.CapAdd, s.CapAdd)
}
if s.CapDrop != nil {
spec.CapDrop = make([]string, len(s.CapDrop))
copy(spec.CapDrop, s.CapDrop)
}
if s.Command != nil {
spec.Command = make([]string, len(s.Command))
copy(spec.Command, s.Command)
@@ -347,15 +357,12 @@ func (s *ContainerSpec) Clone() ContainerSpec {
spec.ConfigMounts[i] = cm.Clone()
}
}
if s.CapAdd != nil {
spec.CapAdd = make([]string, len(s.CapAdd))
copy(spec.CapAdd, s.CapAdd)
if s.Sysctls != nil {
spec.Sysctls = make(map[string]string, len(s.Sysctls))
for k, v := range s.Sysctls {
spec.Sysctls[k] = v
}
}
if s.CapDrop != nil {
spec.CapDrop = make([]string, len(s.CapDrop))
copy(spec.CapDrop, s.CapDrop)
}
return spec
}
+5
View File
@@ -232,6 +232,9 @@ func TestContainerSpec_Clone(t *testing.T) {
Memory: 2345,
MemoryReservation: 3456,
},
Sysctls: map[string]string{
"net.ipv4.ip_forward": "1",
},
User: "1000:1000",
Volumes: []string{"/data", "/config"},
VolumeMounts: []VolumeMount{
@@ -259,6 +262,7 @@ func TestContainerSpec_Clone(t *testing.T) {
original.VolumeMounts[0].ContainerPath = stringModified
original.ConfigMounts[0].ContainerPath = stringModified
*original.ConfigMounts[0].Mode = 0o755 // Modify the Mode pointer value
original.Sysctls["net.ipv4.ip_forward"] = stringModified
assert.False(t, original.Equals(cloned))
// Assert cloned values are unchanged
@@ -285,4 +289,5 @@ func TestContainerSpec_Clone(t *testing.T) {
assert.Equal(t, "/etc/config", cloned.ConfigMounts[0].ContainerPath)
assert.NotNil(t, cloned.ConfigMounts[0].Mode)
assert.Equal(t, os.FileMode(0o644), *cloned.ConfigMounts[0].Mode, "Mode should be deep copied")
assert.Equal(t, "1", cloned.Sysctls["net.ipv4.ip_forward"])
}