letthefireflieslive
letthefireflieslive

Reputation: 12684

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

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
    

Upvotes: 1

Views: 3875

Answers (3)

andrea morando
andrea morando

Reputation: 1

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

Upvotes: 0

Sudesh Jethoe
Sudesh Jethoe

Reputation: 106

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

Upvotes: 3

Plamen Kovachev
Plamen Kovachev

Reputation: 11

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

Upvotes: 1

Related Questions