Skip to content

Commit 44b26ce

Browse files
authored
feat: add shared volume (#77)
1 parent f0f1a8c commit 44b26ce

File tree

6 files changed

+42
-4
lines changed

6 files changed

+42
-4
lines changed

modules/job/config/config.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,15 @@ type Container struct {
5757
Image string `json:"image"`
5858
ImagePullPolicy string `json:"image_pull_policy,omitempty"`
5959
Command []string `json:"command,omitempty"`
60+
Args []string `json:"args,omitempty"`
6061
SecretsVolumes []Secret `json:"secrets_volumes,omitempty"`
6162
ConfigMapsVolumes []ConfigMap `json:"config_maps_volumes,omitempty"`
6263
Limits UsageSpec `json:"limits,omitempty"`
6364
Requests UsageSpec `json:"requests,omitempty"`
6465
EnvConfigMaps []string `json:"env_config_maps,omitempty"`
6566
EnvVariables map[string]string `json:"env_variables,omitempty"`
67+
PreStopCmd []string `json:"pre_stop_cmd,omitempty"`
68+
PostStartCmd []string `json:"post_start_cmd,omitempty"`
6669
}
6770

6871
type Secret struct {

modules/job/driver/sync.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,12 @@ func getJob(res resource.Resource, conf *config.Config) *job.Job {
9494
Name: c.Name,
9595
EnvConfigMaps: c.EnvConfigMaps,
9696
Command: c.Command,
97+
Args: c.Args,
9798
EnvMap: c.EnvVariables,
9899
ImagePullPolicy: c.ImagePullPolicy,
99100
VolumeMounts: vm,
101+
PreStopCmd: c.PreStopCmd,
102+
PostStartCmd: c.PostStartCmd,
100103
Requests: map[string]string{"cpu": c.Requests.CPU, "memory": c.Requests.Memory},
101104
Limits: map[string]string{"cpu": c.Limits.CPU, "memory": c.Limits.Memory},
102105
})

pkg/kube/container/container.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ type Container struct {
1717
VolumeMounts []VolumeMount
1818
Requests map[string]string
1919
Limits map[string]string
20+
PreStopCmd []string
21+
PostStartCmd []string
2022
}
2123

2224
type VolumeMount struct {
@@ -48,6 +50,24 @@ func (c Container) Template() corev1.Container {
4850
})
4951
}
5052

53+
// Shared directory for all the containers
54+
mounts = append(mounts, corev1.VolumeMount{
55+
Name: "shared-data",
56+
MountPath: "/shared",
57+
})
58+
59+
var lifecycle corev1.Lifecycle
60+
if len(c.PreStopCmd) > 0 {
61+
lifecycle.PreStop = &corev1.LifecycleHandler{
62+
Exec: &corev1.ExecAction{Command: c.PreStopCmd},
63+
}
64+
}
65+
if len(c.PostStartCmd) > 0 {
66+
lifecycle.PostStart = &corev1.LifecycleHandler{
67+
Exec: &corev1.ExecAction{Command: c.PostStartCmd},
68+
}
69+
}
70+
5171
return corev1.Container{
5272
Name: c.Name,
5373
Image: c.Image,
@@ -57,6 +77,7 @@ func (c Container) Template() corev1.Container {
5777
Env: env,
5878
Resources: c.parseResources(),
5979
VolumeMounts: mounts,
80+
Lifecycle: &lifecycle,
6081
ImagePullPolicy: corev1.PullPolicy(c.ImagePullPolicy),
6182
}
6283
}

pkg/kube/container/container_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ func TestContainer_Template(t *testing.T) {
6161
v1.ResourceMemory: quantity,
6262
},
6363
},
64-
VolumeMounts: []v1.VolumeMount{{Name: "v1", MountPath: "/tmp/v1"}},
64+
Lifecycle: &v1.Lifecycle{},
65+
VolumeMounts: []v1.VolumeMount{
66+
{Name: "v1", MountPath: "/tmp/v1"},
67+
{Name: "shared-data", MountPath: "/shared"},
68+
},
6569
ImagePullPolicy: "Never",
6670
}},
6771
}
@@ -80,7 +84,7 @@ func TestContainer_Template(t *testing.T) {
8084
Limits: tt.fields.Limits,
8185
}
8286
if got := c.Template(); !reflect.DeepEqual(got, tt.want) {
83-
t.Errorf("Template() = %v, want %v", got, tt.want)
87+
t.Errorf("Template() = %v\n, want %v\n", got, tt.want)
8488
}
8589
})
8690
}

pkg/kube/job/job_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,11 @@ func TestJob_Template(t *testing.T) {
4646
Template: v13.PodTemplateSpec{
4747
ObjectMeta: v1.ObjectMeta{Name: "pod-name"},
4848
Spec: v13.PodSpec{
49-
Containers: nil,
50-
Volumes: nil,
49+
Containers: nil,
50+
Volumes: []v13.Volume{{
51+
Name: "shared-data",
52+
VolumeSource: v13.VolumeSource{EmptyDir: &v13.EmptyDirVolumeSource{}},
53+
}},
5154
RestartPolicy: v13.RestartPolicyNever,
5255
},
5356
},

pkg/kube/pod/pod.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ func (p Pod) Template() corev1.PodTemplateSpec {
2323
for _, v := range p.Volumes {
2424
volumes = append(volumes, v.GetPodVolume())
2525
}
26+
volumes = append(volumes, corev1.Volume{
27+
Name: "shared-data",
28+
VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}},
29+
})
2630
return corev1.PodTemplateSpec{
2731
ObjectMeta: metav1.ObjectMeta{Name: p.Name},
2832
Spec: corev1.PodSpec{

0 commit comments

Comments
 (0)