Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't use workflow parameters inside podSpecPatch resources request with retryStrategy #10362

Closed
2 of 3 tasks
yonirab opened this issue Jan 16, 2023 · 11 comments · Fixed by #12698
Closed
2 of 3 tasks
Assignees
Labels
area/retryStrategy Template-level retryStrategy area/templating Templating with `{{...}}` P1 High priority. All bugs with >=5 thumbs up that aren’t P0, plus: Any other bugs deemed high priority type/bug

Comments

@yonirab
Copy link
Contributor

yonirab commented Jan 16, 2023

Pre-requisites

  • I have double-checked my configuration
  • I can confirm the issues exists when I tested with :latest
  • I'd like to contribute the fix myself (see contributing guide)

What happened/what you expected to happen?

Based on the example here, I am trying to implement exponentially increasing memory resource requests on retries.
In my case, I need to pass the quantity used to specify the resource request as parameters, and to be able to multiply the numeric part of the quantity on each retry.
So for an initial memory resource request of 100Mi, I set parameter memreqnum to 100, and parameter memrequnit to Mi.
Then I thought the following should work:

podSpecPatch: '{"containers":[{"name":"main", "resources":{"requests":{"memory": "{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}{{workflow.parameters.memrequnit}}" }}}]}'

Unfortunately, this returns the following error:

"invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default nodeName="pod-spec-patch-7ccfj(0)"

I have dozens of attempts to work around this, but to no avail.
It seems to me that the crux of the problem is that workflow.parameters.memreqnum refuses to get cast to an int value.
I have tried with asInt, sprig.int and sprig.atoi - with no success.

Version

v3.4.4

Paste a small workflow that reproduces the issue. We must be able to run the workflow; don't enter a workflows that uses private images.

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: pod-spec-patch-
spec:
  entrypoint: whalesay
  arguments:
    parameters:
      - name: memreqnum
        value: 100
      - name: memrequnit
        value: Mi  
  templates:
  - name: whalesay
    retryStrategy:
      limit: 5
      retryPolicy: Always
    podSpecPatch: '{"containers":[{"name":"main", "resources":{"requests":{"memory": "{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}{{workflow.parameters.memrequnit}}" }}}]}'
    container:
      image: docker/whalesay:latest
      command: [cowsay]
      args: ["hello world"]

Logs from the workflow controller

kubectl logs -n argo deploy/workflow-controller | grep ${workflow}

time="2023-01-16T06:05:36.603Z" level=info msg="Processing workflow" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.607Z" level=info msg="Updated phase  -> Running" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.607Z" level=info msg="Retry node pod-spec-patch-7ccfj initialized Running" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.607Z" level=info msg="Pod node pod-spec-patch-7ccfj-2724657108 initialized Pending" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.608Z" level=error msg="Mark error node" error="invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default nodeName="pod-spec-patch-7ccfj(0)" workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.608Z" level=info msg="node pod-spec-patch-7ccfj-2724657108 phase Pending -> Error" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.608Z" level=info msg="node pod-spec-patch-7ccfj-2724657108 message: invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.608Z" level=info msg="node pod-spec-patch-7ccfj-2724657108 finished: 
2023-01-16 06:05:36.608437542 +0000 UTC" namespace=default workflow=pod-spec-patch-7ccfj       
time="2023-01-16T06:05:36.608Z" level=info msg="1 child nodes of pod-spec-patch-7ccfj failed. Trying again..." namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.608Z" level=info msg="Pod node pod-spec-patch-7ccfj-2120515729 initialized Pending" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.609Z" level=error msg="Mark error node" error="invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default nodeName="pod-spec-patch-7ccfj(1)" workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.609Z" level=info msg="node pod-spec-patch-7ccfj-2120515729 phase Pending -> Error" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.609Z" level=info msg="node pod-spec-patch-7ccfj-2120515729 message: invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.609Z" level=info msg="node pod-spec-patch-7ccfj-2120515729 finished: 
2023-01-16 06:05:36.609705202 +0000 UTC" namespace=default workflow=pod-spec-patch-7ccfj       
time="2023-01-16T06:05:36.609Z" level=info msg="2 child nodes of pod-spec-patch-7ccfj failed. Trying again..." namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.610Z" level=info msg="Pod node pod-spec-patch-7ccfj-2254589586 initialized Pending" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.610Z" level=error msg="Mark error node" error="invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default nodeName="pod-spec-patch-7ccfj(2)" workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.610Z" level=info msg="node pod-spec-patch-7ccfj-2254589586 phase Pending -> Error" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.610Z" level=info msg="node pod-spec-patch-7ccfj-2254589586 message: invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.610Z" level=info msg="node pod-spec-patch-7ccfj-2254589586 finished: 
2023-01-16 06:05:36.610709661 +0000 UTC" namespace=default workflow=pod-spec-patch-7ccfj       
time="2023-01-16T06:05:36.610Z" level=info msg="3 child nodes of pod-spec-patch-7ccfj failed. Trying again..." namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.610Z" level=info msg="Pod node pod-spec-patch-7ccfj-576680591 initialized Pending" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.611Z" level=error msg="Mark error node" error="invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default nodeName="pod-spec-patch-7ccfj(3)" workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.611Z" level=info msg="node pod-spec-patch-7ccfj-576680591 phase Pending -> Error" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.611Z" level=info msg="node pod-spec-patch-7ccfj-576680591 message: invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.611Z" level=info msg="node pod-spec-patch-7ccfj-576680591 finished: 2023-01-16 06:05:36.611524891 +0000 UTC" namespace=default workflow=pod-spec-patch-7ccfj        
time="2023-01-16T06:05:36.611Z" level=info msg="4 child nodes of pod-spec-patch-7ccfj failed. Trying again..." namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.611Z" level=info msg="Pod node pod-spec-patch-7ccfj-4200396032 initialized Pending" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.612Z" level=error msg="Mark error node" error="invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default nodeName="pod-spec-patch-7ccfj(4)" workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.612Z" level=info msg="node pod-spec-patch-7ccfj-4200396032 phase Pending -> Error" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.612Z" level=info msg="node pod-spec-patch-7ccfj-4200396032 message: invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.612Z" level=info msg="node pod-spec-patch-7ccfj-4200396032 finished: 
2023-01-16 06:05:36.612364211 +0000 UTC" namespace=default workflow=pod-spec-patch-7ccfj       
time="2023-01-16T06:05:36.612Z" level=info msg="5 child nodes of pod-spec-patch-7ccfj failed. Trying again..." namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.612Z" level=info msg="Pod node pod-spec-patch-7ccfj-643496877 initialized Pending" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=error msg="Mark error node" error="invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default nodeName="pod-spec-patch-7ccfj(5)" workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="node pod-spec-patch-7ccfj-643496877 phase Pending -> Error" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="node pod-spec-patch-7ccfj-643496877 message: invalid podSpecPatch \"{\\\"containers\\\":[{\\\"name\\\":\\\"main\\\",\\\"resources\\\":{\\\"requests\\\":{\\\"memory\\\":\\\"{{=(2 ** asInt(retries)) * asInt(workflow.parameters.memreqnum)}}Mi\\\"}}}]}\": quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="node pod-spec-patch-7ccfj-643496877 finished: 2023-01-16 06:05:36.613369581 +0000 UTC" namespace=default workflow=pod-spec-patch-7ccfj        
time="2023-01-16T06:05:36.613Z" level=info msg="No more retries left. Failing..." namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="node pod-spec-patch-7ccfj phase Running -> Error" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="node pod-spec-patch-7ccfj message: No more retries left" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="node pod-spec-patch-7ccfj finished: 2023-01-16 
06:05:36.613613061 +0000 UTC" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="TaskSet Reconciliation" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg=reconcileAgentPod namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="Updated phase Running -> Error" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="Updated message  -> No more retries left" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="Marking workflow completed" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="Marking workflow as pending archiving" namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.613Z" level=info msg="Checking daemoned children of " namespace=default workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.619Z" level=info msg="cleaning up pod" action=deletePod key=default/pod-spec-patch-7ccfj-1340600742-agent/deletePod
time="2023-01-16T06:05:36.622Z" level=info msg="Workflow update successful" namespace=default phase=Error resourceVersion=585790368 workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.651Z" level=info msg="archiving workflow" namespace=default uid=9a070604-c9ce-45ce-b7d2-67281cef20d0 workflow=pod-spec-patch-7ccfj
time="2023-01-16T06:05:36.676Z" level=info msg="Queueing Error workflow default/pod-spec-patch-7ccfj for delete in 10h0m0s due to TTL"

Logs from in your workflow's wait container

kubectl logs -n argo -c wait -l workflows.argoproj.io/workflow=${workflow},workflow.argoproj.io/phase!=Succeeded

No resources found in argo namespace.
@sarabala1979 sarabala1979 added the P3 Low priority label Jan 19, 2023
@juliev0 juliev0 added P2 Important. All bugs with >=3 thumbs up that aren’t P0 or P1, plus: Any other bugs deemed important and removed P3 Low priority labels Mar 23, 2023
@juliev0 juliev0 added P1 High priority. All bugs with >=5 thumbs up that aren’t P0, plus: Any other bugs deemed high priority and removed P2 Important. All bugs with >=3 thumbs up that aren’t P0 or P1, plus: Any other bugs deemed important labels Sep 7, 2023
@agilgur5 agilgur5 added the area/templating Templating with `{{...}}` label Oct 4, 2023
@eduardodbr eduardodbr self-assigned this Feb 24, 2024
@eduardodbr
Copy link
Member

eduardodbr commented Feb 24, 2024

Hi @yonirab

there are two issues here:

first, you should use int() to convert a string to an integer, as shown here: https://expr-lang.org/docs/language-definition#int

podSpecPatch: '{"containers":[{"name":"main", "resources":{"requests":{"memory": "{{=(2 ** int(retries)) * int(workflow.parameters.memreqnum)}}{{workflow.parameters.memrequnit}}" }}}]}'

however, that doesn't seem to work because when the parameters are substituted the retry value isn't available and when the retry is injected the workflow.parameters are not available. I can try to fix this.

@agilgur5 agilgur5 added the area/retry-manual Manual workflow "Retry" Action (API/CLI/UI). See retryStrategy for template-level retries label Feb 25, 2024
@agilgur5 agilgur5 changed the title Can't cast input parameters to int inside podSpecPatch resources request Can't cast input parameters to int inside podSpecPatch resources request with retryStrategy Feb 25, 2024
@yonirab
Copy link
Contributor Author

yonirab commented Feb 25, 2024

Wow, thanks so much @eduardodbr and @agilgur5 !
I'm definitely looking forward to trying this out!

@agilgur5
Copy link
Member

all credit to @eduardodbr, he made reviewing it pretty easy 🙂

@agilgur5 agilgur5 changed the title Can't cast input parameters to int inside podSpecPatch resources request with retryStrategy Can't cast workflow parameters to int inside podSpecPatch resources request with retryStrategy Mar 26, 2024
@agilgur5 agilgur5 changed the title Can't cast workflow parameters to int inside podSpecPatch resources request with retryStrategy Can't use workflow parameters inside podSpecPatch resources request with retryStrategy Mar 26, 2024
@EladProject
Copy link

EladProject commented Mar 27, 2024

Hi @eduardodbr
This doesn't seem to work when I use inputs.parameters.memreqnum instead of workflow.parameters.memreqnum.

@yonirab
Copy link
Contributor Author

yonirab commented Apr 2, 2024

@eduardodbr @agilgur5 As mentioned by @EladProject , this only seems to work if the memory request is passed as a workflow parameter via workflow.parameters.memreqnum.
But to be of use in a workflow with multiple steps, it is necessary to be able to calculate the memory request based on an expression that involves both retries and inputs.parameters.memreqnum too, and that does not seem to be working.

Any chance there might be some workaround / simple fix to enable that?

@eduardodbr
Copy link
Member

eduardodbr commented Apr 2, 2024

inputs.parameters should be a global param as well as workflow.parameters, can you give me an example demonstrating the issue please?

@EladProject
Copy link

Sure,

This works: memory: "{{= (sprig.int(retries)+1)* sprig.int(workflow.parameters.memreqnum)}}Gi"
This doesn't: memory: "{{= (sprig.int(retries)+1)* sprig.int(inputs.parameters.memreqnum)}}Gi"
(the error is "Error applying PodSpecPatch")

And just to verify that inputs.parameters.memreqnum is defined correctly,
This also works: memory: "{{= 1* sprig.int(inputs.parameters.memreqnum)}}Gi"

@yonirab
Copy link
Contributor Author

yonirab commented Apr 3, 2024

@eduardodbr Here is a workflow that demonstrates the problem. This fails immediately with message: Error applying PodSpecPatch:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: wf-
spec:
  entrypoint: wf
  templates:
  - name: wf
    steps:

    - - name: run-task1
        template: run-task
        arguments:
          parameters:
            - name: memreqnum
              value: '25'
            - name: memrequnit
              value: Mi
            - name: message
              value: "hello from run-task1"

      - name: run-task2
        template: run-task
        arguments:
          parameters:
            - name: memreqnum
              value: '300'
            - name: memrequnit
              value: Mi
            - name: message
              value: "hello from run-task2"
 

  - name: run-task
    inputs:
      parameters:
        - name: memreqnum
        - name: memrequnit
        - name: message
    retryStrategy:
      limit: "2"
      retryPolicy: "Always"
      expression: 'lastRetry.status == "Error" or (lastRetry.status == "Failed" and asInt(lastRetry.exitCode) not in [1,2,127])'
    podSpecPatch: |
      containers:
      - name: main
        resources:
          requests:
            memory: "{{= (sprig.int(retries)+1)* sprig.int(inputs.parameters.memreqnum)}}{{inputs.parameters.memrequnit}}"
    container:
      image: docker/whalesay
      command: [cowsay]
      args: ["{{inputs.parameters.message}}"]

@agilgur5 agilgur5 added this to the v3.5.x patches milestone Apr 3, 2024
@yonirab
Copy link
Contributor Author

yonirab commented Apr 10, 2024

@eduardodbr @agilgur5 Any ideas about why the above fails?

@agilgur5
Copy link
Member

@eduardodbr knows this part of the codebase better than me (and wrote the PR) and I have a bit too much on my plate right now, so I'll leave it to him when he gets a chance.

@agilgur5
Copy link
Member

Follow-up issue regarding inputs.parameters + {{retries}} in #12941 (as it is independent of this issue for workflow.parameters, which has been fixed)

@argoproj argoproj locked as resolved and limited conversation to collaborators Apr 16, 2024
@agilgur5 agilgur5 added area/retryStrategy Template-level retryStrategy and removed area/retry-manual Manual workflow "Retry" Action (API/CLI/UI). See retryStrategy for template-level retries labels Apr 25, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area/retryStrategy Template-level retryStrategy area/templating Templating with `{{...}}` P1 High priority. All bugs with >=5 thumbs up that aren’t P0, plus: Any other bugs deemed high priority type/bug
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants