pipeline icon indicating copy to clipboard operation
pipeline copied to clipboard

CEL support in PipelineRun Task params values

Open say5 opened this issue 1 year ago • 4 comments

Feature request

Support CEL in PipelineRun Task params values (and matrix values).

Use case

Imagine we have a Pipeline cel-use-case with one task payload, this Pipeline has 3 params: a, b and c. Task payload has only one param - destination. Now, depending on value of a we should supply b or c to payload task. Currently it can be done like this:

Option A - using when:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: cel-use-case
spec:
  params:
  - a
  - b
  - c
  tasks:
  - name: payload-b
    params:
    - name: destination
      value: $(params.b)
    when:
    - input: "$(params.a)"
      operator: in
      values: ["b"]

  - name: payload-c
    params:
    - name: destination
      value: $(params.c)
    when:
    - input: "$(params.a)"
      operator: in
      values: ["c"]

Option B - using mutation pre-task:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: cel-use-case
spec:
  params:
  - a
  - b
  - c
  tasks:
  - name: mutation
    taskSpec:
      results:
      - name: destination
        type: string
      steps:
      - name: mutate
        image: bash
        command: ["bash", "-c"]
        args:
        - |
          if [ "$(params.a)" = "b" ]; then
            echo -n "$(params.b)" > $(results.destination.path)
          else
            echo -n "$(params.c)" > $(results.destination.path)
          fi

  - name: payload
    runAfter:
    - mutation
    params:
    - name: destination
      value: $(tasks.mutation.results.destination)

Now, if we have CEL support it can be done like this:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: cel-use-case
spec:
  params:
  - a
  - b
  - c
  tasks:
  - name: payload
    params:
    - name: destination
      cel: "'$(params.a)' == 'b' ? '$(params.b)' : '$(params.c)'"

say5 avatar Dec 05 '24 12:12 say5

Feature request

Support CEL in PipelineRun Task params values (and matrix values).

Use case

Imagine we have a Pipeline cel-use-case with one task payload, this Pipeline has 3 params: a, b and c. Task payload has only one param - destination. Now, depending on value of a we should supply b or c to payload task. Currently it can be done like this:

Option A - using when:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: cel-use-case
spec:
  params:
  - a
  - b
  - c
  tasks:
  - name: payload-b
    params:
    - name: destination
      value: $(params.b)
    when:
    - input: "$(params.a)"
      operator: in
      values: ["b"]

  - name: payload-c
    params:
    - name: destination
      value: $(params.c)
    when:
    - input: "$(params.a)"
      operator: in
      values: ["c"]

Option B - using mutation pre-task:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: cel-use-case
spec:
  params:
  - a
  - b
  - c
  tasks:
  - name: mutation
    taskSpec:
      results:
      - name: destination
        type: string
      steps:
      - name: mutate
        image: bash
        command: ["bash", "-c"]
        args:
        - |
          if [ "$(params.a)" = "b" ]; then
            echo -n "$(params.b)" > $(results.destination.path)
          else
            echo -n "$(params.c)" > $(results.destination.path)
          fi

  - name: payload
    runAfter:
    - mutation
    params:
    - name: destination
      value: $(tasks.mutation.results.destination)

Now, if we have CEL support it can be done like this:

apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
  name: cel-use-case
spec:
  params:
  - a
  - b
  - c
  tasks:
  - name: payload
    params:
    - name: destination
      cel: "'$(params.a)' == 'b' ? '$(params.b)' : '$(params.c)'"

HAMEDwwwGmildotcom avatar Dec 12 '24 21:12 HAMEDwwwGmildotcom

    • @

HAMEDwwwGmildotcom avatar Dec 12 '24 21:12 HAMEDwwwGmildotcom

____

HAMEDwwwGmildotcom avatar Dec 12 '24 21:12 HAMEDwwwGmildotcom

  • [ ] - > ____

HAMEDwwwGmildotcom avatar Dec 12 '24 21:12 HAMEDwwwGmildotcom