From 7d0d172bf9754b32b0c4335a3c5fba7f578e27c6 Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Fri, 10 Feb 2023 16:26:32 +1100 Subject: [PATCH] functionbuilder --- build/app/restapi/embedded_spec.go | 16 ++++- build/app/restapi/operations/direktiv_post.go | 68 ++++++++++++++++++- 2 files changed, 80 insertions(+), 4 deletions(-) diff --git a/build/app/restapi/embedded_spec.go b/build/app/restapi/embedded_spec.go index 292dcf4..e4b96e6 100644 --- a/build/app/restapi/embedded_spec.go +++ b/build/app/restapi/embedded_spec.go @@ -141,6 +141,12 @@ func init() { "print": true, "silent": false }, + { + "action": "exec", + "exec": "find / -name '*.json'", + "print": true, + "silent": false + }, { "action": "exec", "exec": "/bin/json2excel -inputJson {{- if eq (deref .Infile) \"\" }} \"/tmp/input.json\" {{- else }} {{ .Infile }} {{- end }} input.json -worksheetName \"{{ .WorksheetName }}\" -outputFilename '{{ .OutFilename }}'", @@ -152,7 +158,7 @@ func init() { "exec": "base64 -w 0 /tmp/{{ .OutFilename }}" } ], - "output": "{\n \"export-excel\": {{ (index . 4).result | toJson }}\n}\n" + "output": "{\n \"export-excel\": {{ (index . 5).result | toJson }}\n}\n" }, "x-direktiv-errors": { "io.direktiv.command.error": "Command execution failed", @@ -318,6 +324,12 @@ func init() { "print": true, "silent": false }, + { + "action": "exec", + "exec": "find / -name '*.json'", + "print": true, + "silent": false + }, { "action": "exec", "exec": "/bin/json2excel -inputJson {{- if eq (deref .Infile) \"\" }} \"/tmp/input.json\" {{- else }} {{ .Infile }} {{- end }} input.json -worksheetName \"{{ .WorksheetName }}\" -outputFilename '{{ .OutFilename }}'", @@ -329,7 +341,7 @@ func init() { "exec": "base64 -w 0 /tmp/{{ .OutFilename }}" } ], - "output": "{\n \"export-excel\": {{ (index . 4).result | toJson }}\n}\n" + "output": "{\n \"export-excel\": {{ (index . 5).result | toJson }}\n}\n" }, "x-direktiv-errors": { "io.direktiv.command.error": "Command execution failed", diff --git a/build/app/restapi/operations/direktiv_post.go b/build/app/restapi/operations/direktiv_post.go index f214303..0f40d24 100644 --- a/build/app/restapi/operations/direktiv_post.go +++ b/build/app/restapi/operations/direktiv_post.go @@ -235,8 +235,39 @@ func PostDirektivHandle(params PostParams) middleware.Responder { paramsCollector = append(paramsCollector, ret) accParams.Commands = paramsCollector + ret, err = runCommand5(ctx, accParams, ri) + + responses = append(responses, ret) + + // if foreach returns an error there is no continue + // + // default we do not continue + cont = convertTemplateToBool("", accParams, false) + // cont = convertTemplateToBool("", accParams, true) + // + + if err != nil && !cont { + + errName := cmdErr + + // if the delete function added the cancel tag + ci, ok := sm.Load(*params.DirektivActionID) + if ok { + cinfo, ok := ci.(*ctxInfo) + if ok && cinfo.cancelled { + errName = "direktiv.actionCancelled" + err = fmt.Errorf("action got cancel request") + } + } + + return generateError(errName, err) + } + + paramsCollector = append(paramsCollector, ret) + accParams.Commands = paramsCollector + s, err := templateString(`{ - "export-excel": {{ (index . 4).result | toJson }} + "export-excel": {{ (index . 5).result | toJson }} } `, responses) if err != nil { @@ -368,7 +399,7 @@ func runCommand3(ctx context.Context, params.DirektivDir, } - cmd, err := templateString(`/bin/json2excel -inputJson {{- if eq (deref .Infile) "" }} "/tmp/input.json" {{- else }} {{ .Infile }} {{- end }} input.json -worksheetName "{{ .WorksheetName }}" -outputFilename '{{ .OutFilename }}'`, at) + cmd, err := templateString(`find / -name '*.json'`, at) if err != nil { ri.Logger().Infof("error executing command: %v", err) ir[resultKey] = err.Error() @@ -401,6 +432,39 @@ func runCommand4(ctx context.Context, params.DirektivDir, } + cmd, err := templateString(`/bin/json2excel -inputJson {{- if eq (deref .Infile) "" }} "/tmp/input.json" {{- else }} {{ .Infile }} {{- end }} input.json -worksheetName "{{ .WorksheetName }}" -outputFilename '{{ .OutFilename }}'`, at) + if err != nil { + ri.Logger().Infof("error executing command: %v", err) + ir[resultKey] = err.Error() + return ir, err + } + cmd = strings.Replace(cmd, "\n", "", -1) + + silent := convertTemplateToBool("false", at, false) + print := convertTemplateToBool("true", at, true) + output := "" + + envs := []string{} + + return runCmd(ctx, cmd, envs, output, silent, print, ri) + +} + +// end commands + +// exec +func runCommand5(ctx context.Context, + params accParams, ri *apps.RequestInfo) (map[string]interface{}, error) { + + ir := make(map[string]interface{}) + ir[successKey] = false + + at := accParamsTemplate{ + *params.Body, + params.Commands, + params.DirektivDir, + } + cmd, err := templateString(`base64 -w 0 /tmp/{{ .OutFilename }}`, at) if err != nil { ri.Logger().Infof("error executing command: %v", err)