mirror of
https://github.com/onepanelio/onepanel.git
synced 2025-10-08 15:10:06 +08:00
feat: Added function to strip out form field types.
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/ghodss/yaml"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"regexp"
|
"regexp"
|
||||||
@@ -59,6 +60,12 @@ func unmarshalWorkflows(wfBytes []byte, strict bool) (wfs []wfv1.Workflow, err e
|
|||||||
if strict {
|
if strict {
|
||||||
jsonOpts = append(jsonOpts, argojson.DisallowUnknownFields)
|
jsonOpts = append(jsonOpts, argojson.DisallowUnknownFields)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wfBytes, err = filterOutCustomTypesFromManifest(wfBytes)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
err = argojson.Unmarshal(wfBytes, &wf, jsonOpts...)
|
err = argojson.Unmarshal(wfBytes, &wf, jsonOpts...)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return []wfv1.Workflow{wf}, nil
|
return []wfv1.Workflow{wf}, nil
|
||||||
@@ -221,6 +228,11 @@ func (c *Client) create(namespace string, wf *wfv1.Workflow, opts *WorkflowExecu
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) ValidateWorkflowExecution(namespace string, manifest []byte) (err error) {
|
func (c *Client) ValidateWorkflowExecution(namespace string, manifest []byte) (err error) {
|
||||||
|
manifest, err = filterOutCustomTypesFromManifest(manifest)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
workflows, err := unmarshalWorkflows(manifest, true)
|
workflows, err := unmarshalWorkflows(manifest, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@@ -795,3 +807,61 @@ func (c *Client) ListFiles(namespace, key string) (files []*File, err error) {
|
|||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func filterOutCustomTypesFromManifest(manifest []byte) (result []byte, err error) {
|
||||||
|
data := make(map[string]interface{})
|
||||||
|
err = yaml.Unmarshal(manifest, &data)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
spec, ok := data["spec"]
|
||||||
|
if !ok {
|
||||||
|
return manifest, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
specMap, ok := spec.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return manifest, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
arguments, ok := specMap["arguments"]
|
||||||
|
if !ok {
|
||||||
|
return manifest, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
argumentsMap, ok := arguments.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return manifest, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
parameters, ok := argumentsMap["parameters"]
|
||||||
|
if !ok {
|
||||||
|
return manifest, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
parametersList, ok := parameters.([]interface{})
|
||||||
|
if !ok {
|
||||||
|
return manifest, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, parameter := range parametersList {
|
||||||
|
paramMap, ok := parameter.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
keysToDelete := make([]string, 0)
|
||||||
|
for key := range paramMap {
|
||||||
|
if key != "name" && key != "value" {
|
||||||
|
keysToDelete = append(keysToDelete, key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, key := range keysToDelete {
|
||||||
|
delete(paramMap, key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return yaml.Marshal(data)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user