How can you trigger an existing workflow/workflow-template outside argo-events template or namespace?

2.9k Views Asked by At

Based on documentation, we can trigger the creation of a workflow. Is there is a way to trigger an existing workflow (deployed in argo namespace) from a sensor in argo-events namespace?

Something like:

apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: webhook
spec:
  template:
    serviceAccountName: operate-workflow-sa
  dependencies:
    - name: test-dep
      eventSourceName: webhook
      eventName: example
  triggers:
    - template:
      name: webhook-workflow-trigger
      argoWorkflow:
        source:
          resource: existing-workflow-in-another-namespace
     

Existing Workflow:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: sb1-
  labels:
    workflows.argoproj.io/archive-strategy: "false"
spec:
  entrypoint: full
  serviceAccountName: argo
  volumes:
  - name: kaniko-secret
    secret:
      secretName: regcred
      items:
        - key: .dockerconfigjson
          path: config.json
  - name: github-access
    secret:
      secretName: github-access
      items:
        - key: token
          path: token
  templates:
  - name: full
    dag:
      tasks:
      - name: build
        templateRef:
          name: container-image
          template: build-kaniko-git
          clusterScope: true
        arguments:
          parameters:
          - name: repo_url
            value: git://github.com/letthefireflieslive/test-app-sb1
          - name: repo_ref
            value: refs/heads/main
          - name: container_image
            value: legnoban/test-app-sb1
          - name: container_tag
            value: 1.0.2
      - name: promote-dev
        templateRef:
          name: promote
          template: promote
          clusterScope: true
        arguments:
          parameters:
            - name: repo_owner
              value: letthefireflieslive
            - name: repo_name
              value: vcs
            - name: repo_branch
              value: master
            - name: deployment_path
              value: overlays/eg/dev/sb1/deployment.yml
            - name: image_owner
              value: legnoban
            - name: image_name
              value: test-app-sb1
            - name: tag
              value: 1.0.2
        dependencies:
          - build
    
3

There are 3 best solutions below

0
Plamen Kovachev On

You should be able to do this, but you need to have serviceaccount in the sensor who can manage workflows. This means clusterrole and clusterrbinding assigned to this account:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: argo-events-core
  namespace: argo-events
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: argo-events-core
  namespace: argo-events
rules:
  - apiGroups:
      - argoproj.io
    resources:
      - workflows
      - workflowtemplates
      - cronworkflows
      - clusterworkflowtemplates
    verbs:
      - "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: argo-events-core
  namespace: argo-events
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: argo-events-core
subjects:
  - kind: ServiceAccount
    name: argo-events-core
    namespace: argo-events
0
Sudesh Jethoe On

In Argo, a Workflow is representation of a job that is running or has completed running, as such this is probably not what you want to do.

What you can do is create a template that will create a workflow (run a job) and then refer to this template in your trigger. In this way you can create a workflow based on the template.

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: sb1-workflowtemplate
spec:
  entrypoint: full
  templates:
  - name: full
    dag:
      tasks:
      - name: build
        templateRef:
          name: container-image
          template: build-kaniko-git
          clusterScope: true
        arguments:
          parameters:
          - name: repo_url
            value: git://github.com/letthefireflieslive/test-app-sb1
          - name: repo_ref
            value: refs/heads/main
          - name: container_image
            value: legnoban/test-app-sb1
          - name: container_tag
            value: 1.0.2
      - name: promote-dev
        templateRef:
          name: promote
          template: promote
          clusterScope: true
        arguments:
          parameters:
            - name: repo_owner
              value: letthefireflieslive
            - name: repo_name
              value: vcs
            - name: repo_branch
              value: master
            - name: deployment_path
              value: overlays/eg/dev/sb1/deployment.yml
            - name: image_owner
              value: legnoban
            - name: image_name
              value: test-app-sb1
            - name: tag
              value: 1.0.2
        dependencies:
          - build
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: webhook
spec:
  template:
    serviceAccountName: operate-workflow-sa
  dependencies:
    - name: test-dep
      eventSourceName: webhook
      eventName: example
  triggers:
    - template:
      name: webhook-workflow-trigger
      argoWorkflow:
          source:
            resource:
              apiVersion: argoproj.io/v1alpha1
              kind: Workflow
              metadata:
                generateName: sb1-
              spec:
                workflowTemplateRef:
                  name: sb1-workflowtemplate
1
andrea morando On
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: webhook-sensor
spec:
  dependencies:
    - name: webhook
      eventSourceName: webhook
      eventName: example
  triggers:
    - template:
        name: webhook-trigger
        argoWorkflow:
            operation: submit
            source:
              resource:
                apiVersion: argoproj.io/v1alpha1
                kind: Workflow
                metadata:
                  generateName: webhook-
                spec:
                  workflowTemplateRef:
                    name: sb1-workflowtemplate