diff --git a/pkg/phase/executors/container.go b/pkg/phase/executors/container.go index beafd8d84..2f3dc49d8 100644 --- a/pkg/phase/executors/container.go +++ b/pkg/phase/executors/container.go @@ -103,16 +103,23 @@ func (c *ContainerExecutor) Run(evtCh chan events.Event, opts ifc.RunOptions) { return } - c.SetInput(evtCh) - c.PrepareFunctions(evtCh) + if err := c.SetInput(); err != nil { + handleError(evtCh, err) + return + } + + if err := c.PrepareFunctions(); err != nil { + handleError(evtCh, err) + return + } + c.SetMounts() if c.ContConf.PrintOutput { c.RunFns.Output = os.Stdout } - err := c.RunFns.Execute() - if err != nil { + if err := c.RunFns.Execute(); err != nil { handleError(evtCh, err) return } @@ -124,39 +131,38 @@ func (c *ContainerExecutor) Run(evtCh chan events.Event, opts ifc.RunOptions) { } // SetInput sets input for function -func (c *ContainerExecutor) SetInput(evtCh chan events.Event) { +func (c *ContainerExecutor) SetInput() error { buf := &bytes.Buffer{} err := c.ExecutorBundle.Write(buf) if err != nil { - handleError(evtCh, err) - return + return err } c.RunFns.Input = buf + return nil } // PrepareFunctions prepares data for function -func (c *ContainerExecutor) PrepareFunctions(evtCh chan events.Event) { +func (c *ContainerExecutor) PrepareFunctions() error { rnode, err := kyaml.Parse(c.ContConf.Config) if err != nil { - handleError(evtCh, err) - return + return err } // Transform GenericContainer.Spec to annotation, // because we need to specify runFns config in annotation spec, err := yaml.Marshal(c.ContConf.Spec) if err != nil { - handleError(evtCh, err) - return + return err } annotation := kyaml.SetAnnotation(runtimeutil.FunctionAnnotationKey, string(spec)) _, err = annotation.Filter(rnode) if err != nil { - handleError(evtCh, err) - return + return err } c.RunFns.Functions = append(c.RunFns.Functions, rnode) + + return nil } // SetMounts allows to set relative path for storage mounts to prevent security issues diff --git a/pkg/phase/executors/container_test.go b/pkg/phase/executors/container_test.go index 075bd504c..fe1dcc0b1 100644 --- a/pkg/phase/executors/container_test.go +++ b/pkg/phase/executors/container_test.go @@ -28,7 +28,6 @@ import ( "opendev.org/airship/airshipctl/pkg/api/v1alpha1" "opendev.org/airship/airshipctl/pkg/config" "opendev.org/airship/airshipctl/pkg/document" - "opendev.org/airship/airshipctl/pkg/events" "opendev.org/airship/airshipctl/pkg/phase" "opendev.org/airship/airshipctl/pkg/phase/executors" "opendev.org/airship/airshipctl/pkg/phase/ifc" @@ -151,9 +150,8 @@ func TestSetInputSingleDocument(t *testing.T) { Functions: []*kyaml.RNode{}, }, } - ch := make(chan events.Event) - e.SetInput(ch) - assert.Empty(t, ch) + err = e.SetInput() + require.NoError(t, err) // need to use kustomize here, because // it changes order of lines in document @@ -185,9 +183,8 @@ func TestSetInputManyDocuments(t *testing.T) { Functions: []*kyaml.RNode{}, }, } - ch := make(chan events.Event) - e.SetInput(ch) - assert.Empty(t, ch) + err = e.SetInput() + require.NoError(t, err) // need to use kustomize here, because // it changes order of lines in document @@ -232,9 +229,8 @@ func TestPrepareFunctions(t *testing.T) { }, } - ch := make(chan events.Event) - e.PrepareFunctions(ch) - assert.Empty(t, ch) + err = e.PrepareFunctions() + require.NoError(t, err) strFuncs, err := e.RunFns.Functions[0].String() require.NoError(t, err)