|
|
@@ -0,0 +1,63 @@
|
|
|
+package approve_former
|
|
|
+
|
|
|
+const flowTemplate = `apiVersion: argoproj.io/v1alpha1
|
|
|
+kind: WorkflowTemplate
|
|
|
+metadata:
|
|
|
+ name: {{ .name }}
|
|
|
+spec:
|
|
|
+ entrypoint: approve-flow
|
|
|
+ templates:
|
|
|
+ - name: approve-flow
|
|
|
+ dag:
|
|
|
+ tasks:
|
|
|
+ {{- if .nodeContent }}
|
|
|
+ {{ .nodeContent }}
|
|
|
+ {{- else }}
|
|
|
+ - name: node
|
|
|
+ template: approval
|
|
|
+ {{- end }}
|
|
|
+
|
|
|
+ - name: approval
|
|
|
+ suspend: {}
|
|
|
+ inputs:
|
|
|
+ parameters:
|
|
|
+ - name: approve
|
|
|
+ default: '通过'
|
|
|
+ enum:
|
|
|
+ - '通过'
|
|
|
+ - '拒绝'
|
|
|
+ outputs:
|
|
|
+ parameters:
|
|
|
+ - name: approve
|
|
|
+ valueFrom:
|
|
|
+ supplied: {}
|
|
|
+`
|
|
|
+
|
|
|
+type Flow struct {
|
|
|
+ Name string
|
|
|
+ Nodes []Node
|
|
|
+}
|
|
|
+
|
|
|
+func NewFlow(name string, nodes ...Node) *Flow {
|
|
|
+ return &Flow{
|
|
|
+ Name: name,
|
|
|
+ Nodes: nodes,
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (flow *Flow) Render() (string, error) {
|
|
|
+ nodeContents := make([]string, 0)
|
|
|
+ for _, node := range flow.Nodes {
|
|
|
+ nodeContent, err := node.Render()
|
|
|
+ if err != nil {
|
|
|
+ return "", err
|
|
|
+ }
|
|
|
+
|
|
|
+ nodeContents = append(nodeContents, nodeContent)
|
|
|
+ }
|
|
|
+
|
|
|
+ return render("flow", flowTemplate, map[string]any{
|
|
|
+ "name": flow.Name,
|
|
|
+ "nodes": nodeContents,
|
|
|
+ })
|
|
|
+}
|