diff --git a/pkg/config/stepmeta.go b/pkg/config/stepmeta.go index 778ed1169..3d05a8e70 100644 --- a/pkg/config/stepmeta.go +++ b/pkg/config/stepmeta.go @@ -89,6 +89,21 @@ type Container struct { Shell string `json:"shell"` WorkingDir string `json:"workingDir"` Conditions []Condition `json:"conditions,omitempty"` + Options []Option `json:"options,omitempt"` + //VolumeMounts []VolumeMount `json:"volumeMounts,omitempty"` +} + +// ToDo: Add the missing Volumes part to enable the volume mount completly +// VolumeMount defines an mount path +// type VolumeMount struct { +// MountPath string `json:"mountPath"` +// Name string `json:"name"` +//} + +// Option defines an docker option +type Option struct { + Name string `json:"name"` + Value string `json:"value"` } // EnvVar defines an environment variable @@ -229,6 +244,8 @@ func (m *StepData) GetContextDefaults(stepName string) (io.ReadCloser, error) { p["dockerName"] = container.Name p["dockerPullImage"] = container.ImagePullPolicy != "Never" p["dockerWorkspace"] = container.WorkingDir + p["dockerOptions"] = optionsAsStringSlice(container.Options) + //p["dockerVolumeBind"] = volumeMountsAsStringSlice(container.VolumeMounts) // Ready command not relevant for main runtime container so far //p[] = container.ReadyCommand @@ -246,14 +263,12 @@ func (m *StepData) GetContextDefaults(stepName string) (io.ReadCloser, error) { root["sidecarPullImage"] = m.Spec.Sidecars[0].ImagePullPolicy != "Never" root["sidecarReadyCommand"] = m.Spec.Sidecars[0].ReadyCommand root["sidecarWorkspace"] = m.Spec.Sidecars[0].WorkingDir + root["sidecarOptions"] = optionsAsStringSlice(m.Spec.Sidecars[0].Options) + //root["sidecarVolumeBind"] = volumeMountsAsStringSlice(m.Spec.Sidecars[0].VolumeMounts) } // not filled for now since this is not relevant in Kubernetes case - //p["dockerOptions"] = container. - //p["dockerVolumeBind"] = container. //root["containerPortMappings"] = m.Spec.Sidecars[0]. - //root["sidecarOptions"] = m.Spec.Sidecars[0]. - //root["sidecarVolumeBind"] = m.Spec.Sidecars[0]. if len(m.Spec.Inputs.Resources) > 0 { keys := []string{} @@ -310,3 +325,20 @@ func envVarsAsStringSlice(envVars []EnvVar) []string { } return e } + +func optionsAsStringSlice(options []Option) []string { + e := []string{} + for _, v := range options { + e = append(e, fmt.Sprintf("%v %v", v.Name, v.Value)) + } + return e +} + +//ToDo: Enable this when the Volumes part is also implemented +//func volumeMountsAsStringSlice(volumeMounts []VolumeMount) []string { +// e := []string{} +// for _, v := range volumeMounts { +// e = append(e, fmt.Sprintf("%v:%v", v.Name, v.MountPath)) +// } +// return e +//} diff --git a/pkg/config/stepmeta_test.go b/pkg/config/stepmeta_test.go index 7917ade3b..11c83a6ad 100644 --- a/pkg/config/stepmeta_test.go +++ b/pkg/config/stepmeta_test.go @@ -338,6 +338,14 @@ func TestGetContextDefaults(t *testing.T) { Image: "testImage:tag", Shell: "/bin/bash", WorkingDir: "/test/dir", + Options: []Option{ + {Name: "opt1", Value: "optValue1"}, + {Name: "opt2", Value: "optValue2"}, + }, + //VolumeMounts: []VolumeMount{ + // {MountPath: "mp1", Name: "mn1"}, + // {MountPath: "mp2", Name: "mn2"}, + //}, }, }, Sidecars: []Container{ @@ -352,6 +360,14 @@ func TestGetContextDefaults(t *testing.T) { ImagePullPolicy: "Never", ReadyCommand: "/sidecar/command", WorkingDir: "/sidecar/dir", + Options: []Option{ + {Name: "opt3", Value: "optValue3"}, + {Name: "opt4", Value: "optValue4"}, + }, + //VolumeMounts: []VolumeMount{ + // {MountPath: "mp3", Name: "mn3"}, + // {MountPath: "mp4", Name: "mn4"}, + //}, }, }, }, @@ -379,6 +395,8 @@ func TestGetContextDefaults(t *testing.T) { assert.Equal(t, "testcontainer", d.Defaults[0].Steps["testStep"]["dockerName"], "dockerName default not available") assert.Equal(t, true, d.Defaults[0].Steps["testStep"]["dockerPullImage"], "dockerPullImage default not available") assert.Equal(t, "/test/dir", d.Defaults[0].Steps["testStep"]["dockerWorkspace"], "dockerWorkspace default not available") + assert.Equal(t, []interface{}{"opt1 optValue1", "opt2 optValue2"}, d.Defaults[0].Steps["testStep"]["dockerOptions"], "dockerOptions default not available") + //assert.Equal(t, []interface{}{"mn1:mp1", "mn2:mp2"}, d.Defaults[0].Steps["testStep"]["dockerVolumeBind"], "dockerVolumeBind default not available") assert.Equal(t, "/sidecar/command", d.Defaults[0].Steps["testStep"]["sidecarCommand"], "sidecarCommand default not available") assert.Equal(t, []interface{}{"env3=val3", "env4=val4"}, d.Defaults[0].Steps["testStep"]["sidecarEnvVars"], "sidecarEnvVars default not available") @@ -387,6 +405,8 @@ func TestGetContextDefaults(t *testing.T) { assert.Equal(t, false, d.Defaults[0].Steps["testStep"]["sidecarPullImage"], "sidecarPullImage default not available") assert.Equal(t, "/sidecar/command", d.Defaults[0].Steps["testStep"]["sidecarReadyCommand"], "sidecarReadyCommand default not available") assert.Equal(t, "/sidecar/dir", d.Defaults[0].Steps["testStep"]["sidecarWorkspace"], "sidecarWorkspace default not available") + assert.Equal(t, []interface{}{"opt3 optValue3", "opt4 optValue4"}, d.Defaults[0].Steps["testStep"]["sidecarOptions"], "sidecarOptions default not available") + //assert.Equal(t, []interface{}{"mn3:mp3", "mn4:mp4"}, d.Defaults[0].Steps["testStep"]["sidecarVolumeBind"], "sidecarVolumeBind default not available") }) t.Run("Negative case", func(t *testing.T) {