Skip to content

Commit a7874cc

Browse files
Merge pull request #60 from Roblox/filesystem_isolation
Change filesystem isolation to FSIsolationImage.
2 parents 6416bf6 + 2e0a50b commit a7874cc

File tree

2 files changed

+24
-19
lines changed

2 files changed

+24
-19
lines changed

containerd/containerd.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,12 @@ type ContainerConfig struct {
3636
ContainerName string
3737
ContainerSnapshotName string
3838
NetworkNamespacePath string
39-
SecretsDir string
40-
TaskDir string
41-
AllocDir string
39+
SecretsDirSrc string
40+
TaskDirSrc string
41+
AllocDirSrc string
42+
SecretsDirDest string
43+
TaskDirDest string
44+
AllocDirDest string
4245
Env []string
4346
MemoryLimit int64
4447
CPUShares int64
@@ -165,20 +168,20 @@ func (d *Driver) createContainer(containerConfig *ContainerConfig, config *TaskC
165168
}
166169

167170
// Setup "/secrets" (NOMAD_SECRETS_DIR) in the container.
168-
if containerConfig.SecretsDir != "" {
169-
secretsMount := buildMountpoint("bind", "/secrets", containerConfig.SecretsDir, []string{"rbind", "ro"})
171+
if containerConfig.SecretsDirSrc != "" && containerConfig.SecretsDirDest != "" {
172+
secretsMount := buildMountpoint("bind", containerConfig.SecretsDirDest, containerConfig.SecretsDirSrc, []string{"rbind", "rw"})
170173
mounts = append(mounts, secretsMount)
171174
}
172175

173176
// Setup "/local" (NOMAD_TASK_DIR) in the container.
174-
if containerConfig.TaskDir != "" {
175-
taskMount := buildMountpoint("bind", "/local", containerConfig.TaskDir, []string{"rbind", "ro"})
177+
if containerConfig.TaskDirSrc != "" && containerConfig.TaskDirDest != "" {
178+
taskMount := buildMountpoint("bind", containerConfig.TaskDirDest, containerConfig.TaskDirSrc, []string{"rbind", "rw"})
176179
mounts = append(mounts, taskMount)
177180
}
178181

179182
// Setup "/alloc" (NOMAD_ALLOC_DIR) in the container.
180-
if containerConfig.AllocDir != "" {
181-
allocMount := buildMountpoint("bind", "/alloc", containerConfig.AllocDir, []string{"rbind", "ro"})
183+
if containerConfig.AllocDirSrc != "" && containerConfig.AllocDirDest != "" {
184+
allocMount := buildMountpoint("bind", containerConfig.AllocDirDest, containerConfig.AllocDirSrc, []string{"rbind", "rw"})
182185
mounts = append(mounts, allocMount)
183186
}
184187

containerd/driver.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/hashicorp/go-hclog"
3030
log "github.com/hashicorp/go-hclog"
3131
"github.com/hashicorp/nomad/client/stats"
32+
"github.com/hashicorp/nomad/client/taskenv"
3233
"github.com/hashicorp/nomad/drivers/shared/eventer"
3334
"github.com/hashicorp/nomad/plugins/base"
3435
"github.com/hashicorp/nomad/plugins/drivers"
@@ -118,7 +119,7 @@ var (
118119
capabilities = &drivers.Capabilities{
119120
SendSignals: true,
120121
Exec: true,
121-
FSIsolation: drivers.FSIsolationNone,
122+
FSIsolation: drivers.FSIsolationImage,
122123
NetIsolationModes: []drivers.NetIsolationMode{drivers.NetIsolationModeGroup, drivers.NetIsolationModeTask},
123124
}
124125
)
@@ -385,18 +386,19 @@ func (d *Driver) StartTask(cfg *drivers.TaskConfig) (*drivers.TaskHandle, *drive
385386
if skipOverride(key) {
386387
continue
387388
}
388-
if key == "NOMAD_SECRETS_DIR" {
389-
containerConfig.SecretsDir = val
390-
}
391-
if key == "NOMAD_TASK_DIR" {
392-
containerConfig.TaskDir = val
393-
}
394-
if key == "NOMAD_ALLOC_DIR" {
395-
containerConfig.AllocDir = val
396-
}
397389
containerConfig.Env = append(containerConfig.Env, fmt.Sprintf("%s=%s", key, val))
398390
}
399391

392+
// Setup source paths for secrets, task and alloc directories.
393+
containerConfig.SecretsDirSrc = cfg.TaskDir().SecretsDir
394+
containerConfig.TaskDirSrc = cfg.TaskDir().LocalDir
395+
containerConfig.AllocDirSrc = cfg.TaskDir().SharedAllocDir
396+
397+
// Setup destination paths for secrets, task and alloc directories.
398+
containerConfig.SecretsDirDest = cfg.Env[taskenv.SecretsDir]
399+
containerConfig.TaskDirDest = cfg.Env[taskenv.TaskLocalDir]
400+
containerConfig.AllocDirDest = cfg.Env[taskenv.AllocDir]
401+
400402
containerConfig.ContainerSnapshotName = fmt.Sprintf("%s-snapshot", containerName)
401403
if cfg.NetworkIsolation != nil && cfg.NetworkIsolation.Path != "" {
402404
containerConfig.NetworkNamespacePath = cfg.NetworkIsolation.Path

0 commit comments

Comments
 (0)