workflow_template.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. package client
  2. import (
  3. "github.com/pkg/errors"
  4. "net/http"
  5. )
  6. const (
  7. createWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}"
  8. deleteWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}/{name}"
  9. updateWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}/{name}"
  10. getWorkflowTemplatesInNamespaceRelativeUrl = "/api/v1/workflow-templates/{namespace}"
  11. getWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}/{name}"
  12. lintWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}/lint"
  13. )
  14. type CreateWorkflowTemplateParams struct {
  15. Namespace string
  16. TemplateDefinition map[string]any
  17. }
  18. // CreateWorkflowTemplate 创建工作流模板
  19. func (c *Client) CreateWorkflowTemplate(params CreateWorkflowTemplateParams) error {
  20. responseMap := make(map[string]any)
  21. resp, err := c.restyClient.R().
  22. SetHeader("Content-Type", "application/json").
  23. SetAuthToken(c.token).
  24. SetPathParams(map[string]string{
  25. "namespace": params.Namespace,
  26. }).
  27. SetBody(map[string]any{
  28. "namespace": params.Namespace,
  29. "template": params.TemplateDefinition,
  30. }).
  31. SetResult(&responseMap).
  32. SetError(&responseMap).
  33. Post(createWorkflowTemplateRelativeUrl)
  34. if err != nil {
  35. return errors.New(err.Error())
  36. }
  37. switch resp.StatusCode() {
  38. case http.StatusOK:
  39. return nil
  40. case http.StatusConflict:
  41. return errors.New("工作流模板已存在")
  42. default:
  43. message, ok := responseMap["message"]
  44. if !ok {
  45. return errors.Errorf("%v", resp.Status())
  46. }
  47. return errors.Errorf("%v, %v", resp.Status(), message)
  48. }
  49. }
  50. type DeleteWorkflowTemplateParams struct {
  51. Namespace string
  52. Name string
  53. }
  54. // DeleteWorkflowTemplate 删除工作流模板
  55. func (c *Client) DeleteWorkflowTemplate(params DeleteWorkflowTemplateParams) error {
  56. responseMap := make(map[string]any)
  57. resp, err := c.restyClient.R().
  58. SetHeader("Content-Type", "application/json").
  59. SetAuthToken(c.token).
  60. SetPathParams(map[string]string{
  61. "namespace": params.Namespace,
  62. "name": params.Name,
  63. }).
  64. SetResult(&responseMap).
  65. SetError(&responseMap).
  66. Delete(deleteWorkflowTemplateRelativeUrl)
  67. if err != nil {
  68. return errors.New(err.Error())
  69. }
  70. switch resp.StatusCode() {
  71. case http.StatusOK:
  72. return nil
  73. default:
  74. message, ok := responseMap["message"]
  75. if !ok {
  76. return errors.Errorf("%v", resp.Status())
  77. }
  78. return errors.Errorf("%v, %v", resp.Status(), message)
  79. }
  80. }
  81. type UpdateWorkflowTemplateParams struct {
  82. Namespace string
  83. Name string
  84. TemplateDefinition map[string]any
  85. }
  86. // UpdateWorkflowTemplate 更新工作流模板
  87. func (c *Client) UpdateWorkflowTemplate(params UpdateWorkflowTemplateParams) error {
  88. responseMap := make(map[string]any)
  89. resp, err := c.restyClient.R().
  90. SetHeader("Content-Type", "application/json").
  91. SetAuthToken(c.token).
  92. SetPathParams(map[string]string{
  93. "namespace": params.Namespace,
  94. "name": params.Name,
  95. }).
  96. SetBody(map[string]any{
  97. "namespace": params.Namespace,
  98. "name": params.Name,
  99. "template": params.TemplateDefinition,
  100. }).
  101. SetResult(&responseMap).
  102. SetError(&responseMap).
  103. Put(updateWorkflowTemplateRelativeUrl)
  104. if err != nil {
  105. return errors.New(err.Error())
  106. }
  107. switch resp.StatusCode() {
  108. case http.StatusOK:
  109. return nil
  110. default:
  111. message, ok := responseMap["message"]
  112. if !ok {
  113. return errors.Errorf("%v", resp.Status())
  114. }
  115. return errors.Errorf("%v, %v", resp.Status(), message)
  116. }
  117. }
  118. type GetWorkflowTemplatesInNamespaceParams struct {
  119. Namespace string
  120. }
  121. // GetWorkflowTemplatesInNamespace 获取命名空间下的工作流模板
  122. func (c *Client) GetWorkflowTemplatesInNamespace(params GetWorkflowTemplatesInNamespaceParams) ([]map[string]any, error) {
  123. responseMap := make(map[string]any)
  124. resp, err := c.restyClient.R().
  125. SetHeader("Content-Type", "application/json").
  126. SetAuthToken(c.token).
  127. SetPathParams(map[string]string{
  128. "namespace": params.Namespace,
  129. }).
  130. SetResult(&responseMap).
  131. SetError(&responseMap).
  132. Get(getWorkflowTemplatesInNamespaceRelativeUrl)
  133. if err != nil {
  134. return nil, errors.New(err.Error())
  135. }
  136. switch resp.StatusCode() {
  137. case http.StatusOK:
  138. itemsValue, ok := responseMap["items"]
  139. if !ok {
  140. return nil, errors.New("没有获取到items参数")
  141. }
  142. items, ok := itemsValue.([]any)
  143. if !ok {
  144. return nil, errors.New("items不是slice")
  145. }
  146. templateDefinitions := make([]map[string]any, len(items))
  147. for i, item := range items {
  148. templateDefinition, ok := item.(map[string]any)
  149. if !ok {
  150. return nil, errors.New("item无法转换为map[string]any")
  151. }
  152. templateDefinitions[i] = templateDefinition
  153. }
  154. return templateDefinitions, nil
  155. default:
  156. message, ok := responseMap["message"]
  157. if !ok {
  158. return nil, errors.Errorf("%v", resp.Status())
  159. }
  160. return nil, errors.Errorf("%v, %v", resp.Status(), message)
  161. }
  162. }
  163. type GetWorkflowTemplateParams struct {
  164. Namespace string
  165. Name string
  166. }
  167. // GetWorkflowTemplate 获取指定的工作流模板
  168. func (c *Client) GetWorkflowTemplate(params GetWorkflowTemplateParams) (map[string]any, error) {
  169. responseMap := make(map[string]any)
  170. resp, err := c.restyClient.R().
  171. SetHeader("Content-Type", "application/json").
  172. SetAuthToken(c.token).
  173. SetPathParams(map[string]string{
  174. "namespace": params.Namespace,
  175. "name": params.Name,
  176. }).
  177. SetResult(&responseMap).
  178. SetError(&responseMap).
  179. Get(getWorkflowTemplateRelativeUrl)
  180. if err != nil {
  181. return nil, errors.New(err.Error())
  182. }
  183. switch resp.StatusCode() {
  184. case http.StatusOK:
  185. return responseMap, nil
  186. default:
  187. message, ok := responseMap["message"]
  188. if !ok {
  189. return nil, errors.Errorf("%v", resp.Status())
  190. }
  191. return nil, errors.Errorf("%v, %v", resp.Status(), message)
  192. }
  193. }
  194. type LintWorkflowTemplateParams struct {
  195. Namespace string
  196. TemplateDefinition map[string]any
  197. }
  198. // LintWorkflowTemplate 工作流模板定义语法检查
  199. func (c *Client) LintWorkflowTemplate(params LintWorkflowTemplateParams) error {
  200. responseMap := make(map[string]any)
  201. resp, err := c.restyClient.R().
  202. SetHeader("Content-Type", "application/json").
  203. SetAuthToken(c.token).
  204. SetPathParams(map[string]string{
  205. "namespace": params.Namespace,
  206. }).
  207. SetBody(map[string]any{
  208. "namespace": params.Namespace,
  209. "template": params.TemplateDefinition,
  210. }).
  211. SetResult(&responseMap).
  212. SetError(&responseMap).
  213. Post(lintWorkflowTemplateRelativeUrl)
  214. if err != nil {
  215. return errors.New(err.Error())
  216. }
  217. switch resp.StatusCode() {
  218. case http.StatusOK:
  219. return nil
  220. case http.StatusConflict:
  221. return errors.New("工作流模板已存在")
  222. default:
  223. message, ok := responseMap["message"]
  224. if !ok {
  225. return errors.Errorf("%v", resp.Status())
  226. }
  227. return errors.Errorf("%v, %v", resp.Status(), message)
  228. }
  229. }