| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- package client
- import (
- "github.com/pkg/errors"
- "net/http"
- )
- const (
- createWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}"
- deleteWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}/{name}"
- updateWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}/{name}"
- getWorkflowTemplatesInNamespaceRelativeUrl = "/api/v1/workflow-templates/{namespace}"
- getWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}/{name}"
- lintWorkflowTemplateRelativeUrl = "/api/v1/workflow-templates/{namespace}/lint"
- )
- // CreateWorkflowTemplate 创建工作流模板
- // 参数:
- // namespace: 命名空间
- // templateDefinition: map定义
- // 返回值:
- // 错误
- func (c *Client) CreateWorkflowTemplate(namespace string, templateDefinition map[string]any) error {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": namespace,
- }).
- SetBody(map[string]any{
- "namespace": namespace,
- "template": templateDefinition,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Post(createWorkflowTemplateRelativeUrl)
- if err != nil {
- return errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- return nil
- case http.StatusConflict:
- return errors.New("工作流模板已存在")
- default:
- message, ok := responseMap["message"]
- if !ok {
- return errors.Errorf("%v", resp.Status())
- }
- return errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- // DeleteWorkflowTemplate 删除工作流模板
- // 参数:
- // namespace: 命名空间
- // name: 工作流模板名称
- // 返回值:
- // 错误
- func (c *Client) DeleteWorkflowTemplate(namespace string, name string) error {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": namespace,
- "name": name,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Delete(deleteWorkflowTemplateRelativeUrl)
- if err != nil {
- return errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- return nil
- default:
- message, ok := responseMap["message"]
- if !ok {
- return errors.Errorf("%v", resp.Status())
- }
- return errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- // UpdateWorkflowTemplate 更新工作流模板
- // 参数:
- // namespace: 命名空间
- // name: 工作流模板名称
- // templateDefinition: map定义,注意:需要基于查询回来的map定义进行修改
- // 返回值:
- // 错误
- func (c *Client) UpdateWorkflowTemplate(namespace string, name string, templateDefinition map[string]any) error {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": namespace,
- "name": name,
- }).
- SetBody(map[string]any{
- "namespace": namespace,
- "name": name,
- "template": templateDefinition,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Put(updateWorkflowTemplateRelativeUrl)
- if err != nil {
- return errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- return nil
- default:
- message, ok := responseMap["message"]
- if !ok {
- return errors.Errorf("%v", resp.Status())
- }
- return errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- // GetWorkflowTemplatesInNamespace 查询一个命名空间下的工作流模板
- // 参数:
- // namespace: 命名空间
- // 返回值:
- // 查询到的工作流模板定义
- // 错误
- func (c *Client) GetWorkflowTemplatesInNamespace(namespace string) ([]map[string]any, error) {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": namespace,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Get(getWorkflowTemplatesInNamespaceRelativeUrl)
- if err != nil {
- return nil, errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- itemsValue, ok := responseMap["items"]
- if !ok {
- return nil, errors.New("没有获取到items参数")
- }
- items, ok := itemsValue.([]any)
- if !ok {
- return nil, errors.New("items不是slice")
- }
- templateDefinitions := make([]map[string]any, len(items))
- for i, item := range items {
- templateDefinition, ok := item.(map[string]any)
- if !ok {
- return nil, errors.New("item无法转换为map[string]any")
- }
- templateDefinitions[i] = templateDefinition
- }
- return templateDefinitions, nil
- default:
- message, ok := responseMap["message"]
- if !ok {
- return nil, errors.Errorf("%v", resp.Status())
- }
- return nil, errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- // GetWorkflowTemplate 查询具体的工作流模板
- // 参数:
- // namespace: 命名空间
- // name: 工作流模板名称
- // 返回值:
- // 查询到的工作流模板定义
- // 错误
- func (c *Client) GetWorkflowTemplate(namespace string, name string) (map[string]any, error) {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": namespace,
- "name": name,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Get(getWorkflowTemplateRelativeUrl)
- if err != nil {
- return nil, errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- return responseMap, nil
- default:
- message, ok := responseMap["message"]
- if !ok {
- return nil, errors.Errorf("%v", resp.Status())
- }
- return nil, errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- // LintWorkflowTemplate 对工作流模板定义进行语法检查
- // 参数:
- // namespace: 命名空间
- // templateDefinition: map定义
- // 返回值:
- // 错误
- func (c *Client) LintWorkflowTemplate(namespace string, templateDefinition map[string]any) error {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": namespace,
- }).
- SetBody(map[string]any{
- "namespace": namespace,
- "template": templateDefinition,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Post(lintWorkflowTemplateRelativeUrl)
- if err != nil {
- return errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- return nil
- case http.StatusConflict:
- return errors.New("工作流模板已存在")
- default:
- message, ok := responseMap["message"]
- if !ok {
- return errors.Errorf("%v", resp.Status())
- }
- return errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
|