flow.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package approve_former
  2. const flowTemplate = `apiVersion: argoproj.io/v1alpha1
  3. kind: WorkflowTemplate
  4. metadata:
  5. name: {{ .name }}
  6. spec:
  7. entrypoint: approve-flow
  8. templates:
  9. - name: approve-flow
  10. dag:
  11. tasks:
  12. {{- if .nodeContent }}
  13. {{ .nodeContent }}
  14. {{- else }}
  15. - name: node
  16. template: approval
  17. {{- end }}
  18. - name: approval
  19. suspend: {}
  20. inputs:
  21. parameters:
  22. - name: approve
  23. default: '通过'
  24. enum:
  25. - '通过'
  26. - '拒绝'
  27. outputs:
  28. parameters:
  29. - name: approve
  30. valueFrom:
  31. supplied: {}
  32. `
  33. type Flow struct {
  34. Name string
  35. Nodes []Node
  36. }
  37. func NewFlow(name string, nodes ...Node) *Flow {
  38. return &Flow{
  39. Name: name,
  40. Nodes: nodes,
  41. }
  42. }
  43. func (flow *Flow) Render() (string, error) {
  44. nodeContents := make([]string, 0)
  45. for _, node := range flow.Nodes {
  46. nodeContent, err := node.Render()
  47. if err != nil {
  48. return "", err
  49. }
  50. nodeContents = append(nodeContents, nodeContent)
  51. }
  52. return render("flow", flowTemplate, map[string]any{
  53. "name": flow.Name,
  54. "nodes": nodeContents,
  55. })
  56. }