client.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package client
  2. import (
  3. "context"
  4. "github.com/argoproj/argo-workflows/v3/pkg/apiclient"
  5. "github.com/argoproj/argo-workflows/v3/pkg/apiclient/workflow"
  6. "github.com/argoproj/argo-workflows/v3/pkg/apiclient/workflowtemplate"
  7. "github.com/pkg/errors"
  8. log "github.com/sirupsen/logrus"
  9. "k8s.io/client-go/tools/clientcmd"
  10. "os"
  11. "sync"
  12. )
  13. var LogLevel string
  14. var watchWorkflowTokenMap sync.Map
  15. type Client struct {
  16. ctx context.Context
  17. client apiclient.Client
  18. workflowTemplateService workflowtemplate.WorkflowTemplateServiceClient
  19. workflowService workflow.WorkflowServiceClient
  20. }
  21. func NewClient(kubeConfigEnv string, opts ...Option) (*Client, error) {
  22. options := new(Options)
  23. for _, opt := range opts {
  24. opt(options)
  25. }
  26. level, err := log.ParseLevel(options.logLevel)
  27. if err != nil {
  28. level = log.ErrorLevel
  29. }
  30. log.SetLevel(level)
  31. err = os.Setenv("KUBECONFIG", kubeConfigEnv)
  32. if err != nil {
  33. return nil, errors.New(err.Error())
  34. }
  35. apiClientCtx, apiClient, err := apiclient.NewClientFromOpts(apiclient.Opts{
  36. ArgoServerOpts: apiclient.ArgoServerOpts{},
  37. ClientConfigSupplier: func() clientcmd.ClientConfig {
  38. return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(clientcmd.NewDefaultClientConfigLoadingRules(), nil)
  39. },
  40. Context: context.Background(),
  41. })
  42. if err != nil {
  43. return nil, errors.New(err.Error())
  44. }
  45. workflowTemplateService, err := apiClient.NewWorkflowTemplateServiceClient()
  46. if err != nil {
  47. return nil, errors.New(err.Error())
  48. }
  49. return &Client{
  50. ctx: apiClientCtx,
  51. client: apiClient,
  52. workflowTemplateService: workflowTemplateService,
  53. workflowService: apiClient.NewWorkflowServiceClient(),
  54. }, nil
  55. }
  56. func Destroy(c *Client) {
  57. if c == nil {
  58. return
  59. }
  60. c.ctx.Done()
  61. c.client = nil
  62. c.workflowTemplateService = nil
  63. c.workflowService = nil
  64. }