argoproj / argoproj/argo-workflows

skipped dag node marked configmap error after its child node finishes

Open
#13,329 3 comments 0 reactions 0 assignees View on GitHub
area/templates/dag
Dominant language
Go
Stars
17k
Forks
3.7k
Avg merge
1d 20h
Merged PRs (30d)
138

Description

### Pre-requisites

- [X] I have double-checked my configuration
- [X] I have tested with the `:latest` image tag (i.e. `quay.io/argoproj/workflow-controller:latest`) and can confirm the issue still exists on `:latest`. If not, I have explained why, **in detail**, in my description below.
- [X] I have searched existing issues and could not find a match for this bug
- [ ] I'd like to contribute the fix myself (see [contributing guide](https://github.com/argoproj/argo-workflows/blob/main/docs/CONTRIBUTING.md))

### What happened/what did you expect to happen?

node `A` were initially marked `skipped` as expected and proceed to execute `B`
![image](https://github.com/argoproj/argo-workflows/assets/20961507/52402068-d16d-419b-a5cb-d9e9046c359c)

after `B` completed, `A` is marked as error due configmap not found.
![image](https://github.com/argoproj/argo-workflows/assets/20961507/cb9669a3-e6db-4c2b-a2a7-bd12dfedfbcc)

this behaviour only happens to dag template. Step template works fine.

We expect if a node is skipped, it shouldn't matter if the parameter refers to an empty configmap

### Version(s)

3.5.2

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

```YAML
metadata:
name: a2
spec:
templates:
- name: echo2
container:
name: ''
image: alpine:3.7
command:
- echo
- abc
- name: echo1
inputs:
parameters:
- name: abc
valueFrom:
configMapKeyRef:
name: abc
key: abc
container:
name: ''
image: alpine:3.7
command:
- echo
- abc
- name: diamond
steps:
- - name: A
template: echo1
when: 1 == 0
- name: B
template: echo2
dependencies: [ A ]
entrypoint: diamond
```

### Logs from the workflow controller

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

### Logs from in your workflow's wait container

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

Contributor guide

Open the contributing guide

Research direction

Start with the minimal DAG workflow in the issue and reproduce it using the workflow-controller logs. Compare the skipped node's handling in the DAG template with the working step-template behavior, focusing on the configmap parameter resolution after child completion. Done means a skipped node remains skipped even when its referenced configmap is missing, with regression coverage for the provided workflow.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, kubernetes
Domain
backend, devops
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.