argoproj / argo-workflows

Workflow Engine for Kubernetes
https://argo-workflows.readthedocs.io/
Apache License 2.0
14.98k stars 3.19k forks source link

HTTP Template: exit handler on a retry ignores or gets stuck #11072

Open vermaxik opened 1 year ago

vermaxik commented 1 year ago

Pre-requisites

What happened/what you expected to happen?

We've switched from container templates to http template and got unexpected behaviour on retry (both in a pod and a archived).

There are 2 API for the retry: -argo retry workflow-name -argo archive retry workflow-name We use both: first when the pod still in k8s, and second when the pod GC (archived).

Actual behaviour:

Expected behaviour:

Version

3.4.7 (latest)

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: http-template-
spec:
  entrypoint: main
  onExit: exit-handler
  templates:
    - name: main
      http:
        method: POST
        url: https://www.google.com/foo/bar
    - name: exit-handler
      http:
        method: GET
        url: https://reqres.in/api/users/2

Logs from the workflow controller

POD RETRY LOGS:

{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:27:04.613Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Updated phase  -\u003e Running","namespace":"customer-workflows","time":"2023-05-11T13:27:04.615Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"HTTP node http-template-xqbwx initialized Pending","namespace":"customer-workflows","time":"2023-05-11T13:27:04.615Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:27:04.615Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Creating TaskSet","namespace":"customer-workflows","time":"2023-05-11T13:27:04.615Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:27:04.617Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Created Agent pod","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:27:04.626Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:27:04.626Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:27:04.626Z"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Running","resourceVersion":"58401","time":"2023-05-11T13:27:04.633Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:27:14.614Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:27:14.614Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:27:14.614Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:27:14.614Z"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:27:14.614Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:27:14.614Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:27:27.161Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:27:27.162Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:27:27.162Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:27:27.162Z"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:27:27.162Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:27:27.162Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Running","resourceVersion":"58449","time":"2023-05-11T13:27:27.167Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:27:37.179Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:27:37.179Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:27:37.179Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:27:37.179Z"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:27:37.180Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:27:37.180Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Running OnExit handler: exit-handler","namespace":"customer-workflows","time":"2023-05-11T13:27:37.180Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"HTTP node http-template-xqbwx-348320070 initialized Pending","namespace":"customer-workflows","time":"2023-05-11T13:27:37.180Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:27:37.180Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Creating TaskSet","namespace":"customer-workflows","time":"2023-05-11T13:27:37.180Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:27:37.188Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:27:37.188Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:27:37.188Z"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Running","resourceVersion":"58468","time":"2023-05-11T13:27:37.193Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:27:47.189Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:27:47.189Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:27:47.189Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:27:47.189Z"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:27:47.189Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:27:47.190Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Running OnExit handler: exit-handler","namespace":"customer-workflows","time":"2023-05-11T13:27:47.190Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:27:47.190Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:27:47.190Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Updated phase Running -\u003e Failed","namespace":"customer-workflows","time":"2023-05-11T13:27:47.190Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Updated message  -\u003e received non-2xx response code: 404","namespace":"customer-workflows","time":"2023-05-11T13:27:47.190Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Marking workflow completed","namespace":"customer-workflows","time":"2023-05-11T13:27:47.190Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Marking workflow as pending archiving","namespace":"customer-workflows","time":"2023-05-11T13:27:47.190Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Checking daemoned children of ","namespace":"customer-workflows","time":"2023-05-11T13:27:47.190Z","workflow":"http-template-xqbwx"}
{"action":"deletePod","key":"customer-workflows/http-template-xqbwx-1340600742-agent/deletePod","level":"info","msg":"cleaning up pod","time":"2023-05-11T13:27:47.195Z"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Failed","resourceVersion":"58485","time":"2023-05-11T13:27:47.195Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"archiving workflow","namespace":"customer-workflows","time":"2023-05-11T13:27:47.215Z","uid":"062754a7-5246-4e3d-9e42-d9ef9bb1435c","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Queueing Failed workflow customer-workflows/http-template-xqbwx for delete in 1h0m0s due to TTL","time":"2023-05-11T13:27:47.235Z"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:30:58.357Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:30:58.358Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"HTTP node http-template-xqbwx initialized Pending","namespace":"customer-workflows","time":"2023-05-11T13:30:58.358Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:30:58.358Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Creating TaskSet","namespace":"customer-workflows","time":"2023-05-11T13:30:58.358Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:30:58.369Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Created Agent pod","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:30:58.380Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:30:58.381Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:30:58.381Z"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Running","resourceVersion":"58767","time":"2023-05-11T13:30:58.387Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:31:08.358Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:31:08.359Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:31:08.359Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:31:08.360Z"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Running OnExit handler: exit-handler","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Updated phase Running -\u003e Failed","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Updated message  -\u003e received non-2xx response code: 404","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Marking workflow completed","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Marking workflow as pending archiving","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Checking daemoned children of ","namespace":"customer-workflows","time":"2023-05-11T13:31:08.360Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Failed","resourceVersion":"58796","time":"2023-05-11T13:31:08.369Z","workflow":"http-template-xqbwx"}
{"action":"deletePod","key":"customer-workflows/http-template-xqbwx-1340600742-agent/deletePod","level":"info","msg":"cleaning up pod","time":"2023-05-11T13:31:08.370Z"}
{"level":"info","msg":"archiving workflow","namespace":"customer-workflows","time":"2023-05-11T13:31:08.390Z","uid":"062754a7-5246-4e3d-9e42-d9ef9bb1435c","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Queueing Failed workflow customer-workflows/http-template-xqbwx for delete in 1h0m0s due to TTL","time":"2023-05-11T13:31:08.404Z"}

ARCHVIED RETRY:
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:38:09.223Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:38:09.224Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"HTTP node http-template-xqbwx initialized Pending","namespace":"customer-workflows","time":"2023-05-11T13:38:09.224Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:38:09.224Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Creating TaskSet","namespace":"customer-workflows","time":"2023-05-11T13:38:09.224Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:38:09.228Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Created Agent pod","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:38:09.248Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:38:09.248Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:38:09.248Z"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Running","resourceVersion":"59523","time":"2023-05-11T13:38:09.257Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:38:19.224Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:38:19.225Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:38:19.225Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:38:19.225Z"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:38:19.225Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:38:19.225Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:38:32.052Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:38:32.053Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:38:32.053Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:38:32.053Z"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:38:32.053Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:38:32.053Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Running","resourceVersion":"59568","time":"2023-05-11T13:38:32.056Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:38:42.062Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:38:42.062Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:38:42.062Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:38:42.062Z"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:38:42.063Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:38:42.063Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Running OnExit handler: exit-handler","namespace":"customer-workflows","time":"2023-05-11T13:38:42.063Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:38:42.063Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:38:42.063Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Running","resourceVersion":"59586","time":"2023-05-11T13:38:42.067Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Processing workflow","namespace":"customer-workflows","time":"2023-05-11T13:38:52.068Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Task-result reconciliation","namespace":"customer-workflows","numObjs":0,"time":"2023-05-11T13:38:52.069Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"updateAgentPodStatus","namespace":"customer-workflows","time":"2023-05-11T13:38:52.069Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"assessAgentPodStatus","namespace":"customer-workflows","podName":"http-template-xqbwx-1340600742-agent","time":"2023-05-11T13:38:52.069Z"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:38:52.069Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:38:52.069Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Running OnExit handler: exit-handler","namespace":"customer-workflows","time":"2023-05-11T13:38:52.069Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"TaskSet Reconciliation","namespace":"customer-workflows","time":"2023-05-11T13:38:52.069Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"reconcileAgentPod","namespace":"customer-workflows","time":"2023-05-11T13:38:52.069Z","workflow":"http-template-xqbwx"}
{"level":"info","msg":"Workflow update successful","namespace":"customer-workflows","phase":"Running","resourceVersion":"59601","time":"2023-05-11T13:38:52.073Z","workflow":"http-template-xqbwx"}

Logs from in your workflow's wait container

kubectl logs -n argo -c wait -l workflows.argoproj.io/workflow=http-template-xqbwx,workflow.argoproj.io/phase!=Succeeded

No resources found in argo namespace.
stale[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.

MasonM commented 4 weeks ago

I can't seem to reproduce this. Here's what I did:

  1. Submitted the following workflow using argo submit, which is almost the same as the one in the issue description, except it calls https://httpbin.org/uuid so we can easily identify changes by looking for the returned UUID:
    apiVersion: argoproj.io/v1alpha1
    kind: Workflow
    metadata:
      generateName: http-template-
    spec:
      entrypoint: main
      onExit: exit-handler
      templates:
        - name: main
          http:
            method: POST
            url: https://www.google.com/foo/bar
        - name: exit-handler
          http:
            method: GET
            url: https://httpbin.org/uuid
  2. Ran argo get http-template-sx7w5 -o yaml | grep uuid to get the UUID generated by the exit handler, which returned "uuid": "9472c8a9-b36d-4da8-a7d1-4a0491ed6394"
  3. Ran argo retry http-template-sx7w5
  4. Repeated command from step 2, which gave me "uuid": "ec3cb475-b7eb-4e46-ae2c-1728ffcb357b". That proves the exit handler was called a second time.