docker: mount multiple volumes
This commit is contained in:
parent
2d813461d9
commit
6fccb935c4
|
@ -294,21 +294,24 @@ func (d *DockerDriver) createContainer(ctx context.Context, index int, podConfig
|
||||||
cliHostConfig.NetworkMode = container.NetworkMode(fmt.Sprintf("container:%s", maincontainerID))
|
cliHostConfig.NetworkMode = container.NetworkMode(fmt.Sprintf("container:%s", maincontainerID))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var mounts []mount.Mount
|
||||||
|
|
||||||
for _, vol := range containerConfig.Volumes {
|
for _, vol := range containerConfig.Volumes {
|
||||||
if vol.TmpFS != nil {
|
if vol.TmpFS != nil {
|
||||||
cliHostConfig.Mounts = []mount.Mount{
|
mounts = append(mounts, mount.Mount{
|
||||||
mount.Mount{
|
|
||||||
Type: mount.TypeTmpfs,
|
Type: mount.TypeTmpfs,
|
||||||
Target: vol.Path,
|
Target: vol.Path,
|
||||||
TmpfsOptions: &mount.TmpfsOptions{
|
TmpfsOptions: &mount.TmpfsOptions{
|
||||||
SizeBytes: vol.TmpFS.Size,
|
SizeBytes: vol.TmpFS.Size,
|
||||||
},
|
},
|
||||||
},
|
})
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
return nil, errors.Errorf("missing volume config")
|
return nil, errors.Errorf("missing volume config")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if mounts != nil {
|
||||||
|
cliHostConfig.Mounts = mounts
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := d.client.ContainerCreate(ctx, cliContainerConfig, cliHostConfig, nil, "")
|
resp, err := d.client.ContainerCreate(ctx, cliContainerConfig, cliHostConfig, nil, "")
|
||||||
return &resp, err
|
return &resp, err
|
||||||
|
|
|
@ -397,7 +397,7 @@ func TestDockerPod(t *testing.T) {
|
||||||
defer func() { _ = pod.Remove(ctx) }()
|
defer func() { _ = pod.Remove(ctx) }()
|
||||||
|
|
||||||
ce, err := pod.Exec(ctx, &ExecConfig{
|
ce, err := pod.Exec(ctx, &ExecConfig{
|
||||||
Cmd: []string{"sh", "-c", "if [ $(cat /proc/mounts | grep /mnt/tmpfs | grep size=1024k | wc -l ) -ne 1 ]; then exit 1; fi"},
|
Cmd: []string{"sh", "-c", "if [ $(grep /mnt/tmpfs /proc/mounts | grep -c size=1024k) -ne 1 ]; then exit 1; fi"},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected err: %v", err)
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
@ -436,7 +436,99 @@ func TestDockerPod(t *testing.T) {
|
||||||
defer func() { _ = pod.Remove(ctx) }()
|
defer func() { _ = pod.Remove(ctx) }()
|
||||||
|
|
||||||
ce, err := pod.Exec(ctx, &ExecConfig{
|
ce, err := pod.Exec(ctx, &ExecConfig{
|
||||||
Cmd: []string{"sh", "-c", "if [ $(cat /proc/mounts | grep /mnt/tmpfs | wc -l ) -ne 1 ]; then exit 1; fi"},
|
Cmd: []string{"sh", "-c", "if [ $(grep -c /mnt/tmpfs /proc/mounts) -ne 1 ]; then exit 1; fi"},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
code, err := ce.Wait(ctx)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
if code != 0 {
|
||||||
|
t.Fatalf("unexpected exit code: %d", code)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("test pod with two tmpfs volumes with size limit", func(t *testing.T) {
|
||||||
|
pod, err := d.NewPod(ctx, &PodConfig{
|
||||||
|
ID: uuid.NewV4().String(),
|
||||||
|
TaskID: uuid.NewV4().String(),
|
||||||
|
Containers: []*ContainerConfig{
|
||||||
|
&ContainerConfig{
|
||||||
|
Cmd: []string{"cat"},
|
||||||
|
Image: "busybox",
|
||||||
|
Volumes: []Volume{
|
||||||
|
{
|
||||||
|
Path: "/mnt/vol1",
|
||||||
|
TmpFS: &VolumeTmpFS{
|
||||||
|
Size: 1024 * 1024,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Path: "/mnt/vol2",
|
||||||
|
TmpFS: &VolumeTmpFS{
|
||||||
|
Size: 1024 * 1024,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
InitVolumeDir: "/tmp/agola",
|
||||||
|
}, ioutil.Discard)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
defer func() { _ = pod.Remove(ctx) }()
|
||||||
|
|
||||||
|
ce, err := pod.Exec(ctx, &ExecConfig{
|
||||||
|
Cmd: []string{"sh", "-c", "if [ $(grep /mnt/vol1 /proc/mounts | grep -c size=1024k) -ne 1 -o $(grep /mnt/vol2 /proc/mounts | grep -c size=1024k) -ne 1 ]; then exit 1; fi"},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
code, err := ce.Wait(ctx)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
if code != 0 {
|
||||||
|
t.Fatalf("unexpected exit code: %d", code)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("test pod with two tmpfs volumes one with size limit and one without", func(t *testing.T) {
|
||||||
|
pod, err := d.NewPod(ctx, &PodConfig{
|
||||||
|
ID: uuid.NewV4().String(),
|
||||||
|
TaskID: uuid.NewV4().String(),
|
||||||
|
Containers: []*ContainerConfig{
|
||||||
|
&ContainerConfig{
|
||||||
|
Cmd: []string{"cat"},
|
||||||
|
Image: "busybox",
|
||||||
|
Volumes: []Volume{
|
||||||
|
{
|
||||||
|
Path: "/mnt/vol1",
|
||||||
|
TmpFS: &VolumeTmpFS{
|
||||||
|
Size: 1024 * 1024,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Path: "/mnt/vol2",
|
||||||
|
TmpFS: &VolumeTmpFS{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
InitVolumeDir: "/tmp/agola",
|
||||||
|
}, ioutil.Discard)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
defer func() { _ = pod.Remove(ctx) }()
|
||||||
|
|
||||||
|
ce, err := pod.Exec(ctx, &ExecConfig{
|
||||||
|
Cmd: []string{"sh", "-c", "if [ $(grep /mnt/vol1 /proc/mounts | grep -c size=1024k) -ne 1 -o $(grep -c /mnt/vol2 /proc/mounts) -ne 1 ]; then exit 1; fi"},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected err: %v", err)
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
|
|
@ -287,7 +287,57 @@ func TestK8sPod(t *testing.T) {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
ce, err := pod.Exec(ctx, &ExecConfig{
|
ce, err := pod.Exec(ctx, &ExecConfig{
|
||||||
// k8s doesn't set size=1024k in the tmpf mount options but uses other modes to detect the size
|
// k8s doesn't set size=1024k in the tmpf mount options but uses other modes to detect the size
|
||||||
Cmd: []string{"sh", "-c", "if [ $(cat /proc/mounts | grep /mnt/tmpfs | wc -l ) -ne 1 ]; then exit 1; fi"},
|
Cmd: []string{"sh", "-c", "if [ $(grep -c /mnt/tmpfs /proc/mounts) -ne 1 ]; then exit 1; fi"},
|
||||||
|
Stdout: &buf,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
code, err := ce.Wait(ctx)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
if code != 0 {
|
||||||
|
t.Fatalf("unexpected exit code: %d", code)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("test pod with two tmpfs volumes", func(t *testing.T) {
|
||||||
|
pod, err := d.NewPod(ctx, &PodConfig{
|
||||||
|
ID: uuid.NewV4().String(),
|
||||||
|
TaskID: uuid.NewV4().String(),
|
||||||
|
Containers: []*ContainerConfig{
|
||||||
|
&ContainerConfig{
|
||||||
|
Cmd: []string{"cat"},
|
||||||
|
Image: "busybox",
|
||||||
|
Volumes: []Volume{
|
||||||
|
{
|
||||||
|
Path: "/mnt/vol1",
|
||||||
|
TmpFS: &VolumeTmpFS{
|
||||||
|
Size: 1024 * 1024,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Path: "/mnt/vol2",
|
||||||
|
TmpFS: &VolumeTmpFS{
|
||||||
|
Size: 1024 * 1024,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
InitVolumeDir: "/tmp/agola",
|
||||||
|
}, ioutil.Discard)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected err: %v", err)
|
||||||
|
}
|
||||||
|
defer func() { _ = pod.Remove(ctx) }()
|
||||||
|
|
||||||
|
var buf bytes.Buffer
|
||||||
|
ce, err := pod.Exec(ctx, &ExecConfig{
|
||||||
|
// k8s doesn't set size=1024k in the tmpf mount options but uses other modes to detect the size
|
||||||
|
Cmd: []string{"sh", "-c", "if [ $(grep -c /mnt/vol1 /proc/mounts) -ne 1 -o $(grep -c /mnt/vol2 /proc/mounts) ]; then exit 1; fi"},
|
||||||
Stdout: &buf,
|
Stdout: &buf,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue