argo-workflows
argo-workflows copied to clipboard
Can't update CronWorkflow parameter using WebUI when one of the parameters is using valueFrom
Pre-requisites
- [x] I have double-checked my configuration
- [x] I have tested with the
:latestimage 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)
What happened? What did you expect to happen?
Argo-Server returns a validation error while updating the CronWorkflow parameter using WebUI when valueFrom is used.
How to reproduce this bug:
- Create a new
CronWorkflowfrom the example below - Go to the newly created
CronWF - Go to
Workflowtab - Update
testparameter - Click the
Updatebutton
Logs from Argo-Server:
time="2025-06-05T14:04:21.710Z" level=info duration=21.779125ms method=GET path=/api/v1/cron-workflows/default/hello-world size=1528 status=0
time="2025-06-05T14:04:21.714Z" level=info msg="finished unary call with code OK" grpc.code=OK grpc.method=ListWorkflows grpc.service=workflow.WorkflowService grpc.start_time="2025-06-05T14:04:21Z" grpc.time_ms=25.079 span.kind=server system=grpc
time="2025-06-05T14:04:21.720Z" level=info duration=39.556041ms method=GET path=/api/v1/workflows/default size=2649 status=0
time="2025-06-05T14:04:23.878Z" level=info msg="finished unary call with code OK" grpc.code=OK grpc.method=DeleteCronWorkflow grpc.service=cronworkflow.CronWorkflowService grpc.start_time="2025-06-05T14:04:23Z" grpc.time_ms=37.781 span.kind=server system=grpc
time="2025-06-05T14:04:23.879Z" level=info duration=38.579126ms method=DELETE path=/api/v1/cron-workflows/default/hello-world size=2 status=0
time="2025-06-05T14:04:24.013Z" level=info duration=9.313209ms method=GET path=/editor.worker.js size=76198 status=0
time="2025-06-05T14:04:24.034Z" level=info msg="finished unary call with code OK" grpc.code=OK grpc.method=ListCronWorkflows grpc.service=cronworkflow.CronWorkflowService grpc.start_time="2025-06-05T14:04:24Z" grpc.time_ms=28.464 span.kind=server system=grpc
time="2025-06-05T14:04:24.034Z" level=info duration=30.627042ms method=GET path=/api/v1/cron-workflows/default size=54 status=0
time="2025-06-05T14:04:31.407Z" level=info msg="finished unary call with code OK" grpc.code=OK grpc.method=CreateCronWorkflow grpc.service=cronworkflow.CronWorkflowService grpc.start_time="2025-06-05T14:04:31Z" grpc.time_ms=67.841 span.kind=server system=grpc
time="2025-06-05T14:04:31.408Z" level=info duration=75.782041ms method=POST path=/api/v1/cron-workflows/default size=1216 status=0
time="2025-06-05T14:04:31.535Z" level=info msg="finished unary call with code OK" grpc.code=OK grpc.method=GetCronWorkflow grpc.service=cronworkflow.CronWorkflowService grpc.start_time="2025-06-05T14:04:31Z" grpc.time_ms=15.593 span.kind=server system=grpc
time="2025-06-05T14:04:31.537Z" level=info duration=33.834625ms method=GET path=/api/v1/cron-workflows/default/hello-world size=1216 status=0
time="2025-06-05T14:04:31.554Z" level=info msg="finished unary call with code OK" grpc.code=OK grpc.method=ListWorkflows grpc.service=workflow.WorkflowService grpc.start_time="2025-06-05T14:04:31Z" grpc.time_ms=29.566 span.kind=server system=grpc
time="2025-06-05T14:04:31.564Z" level=info duration=45.660917ms method=GET path=/api/v1/workflows/default size=54 status=0
time="2025-06-05T14:04:31.672Z" level=info duration="238.208µs" method=GET path=index.html size=487 status=0
time="2025-06-05T14:04:46.675Z" level=info msg="finished unary call with code OK" grpc.code=OK grpc.method=GetCronWorkflow grpc.service=cronworkflow.CronWorkflowService grpc.start_time="2025-06-05T14:04:46Z" grpc.time_ms=11.734 span.kind=server system=grpc
time="2025-06-05T14:04:46.676Z" level=info duration=16.378208ms method=GET path=/api/v1/cron-workflows/default/hello-world size=1216 status=0
time="2025-06-05T14:04:46.690Z" level=info msg="finished unary call with code InvalidArgument" error="rpc error: code = InvalidArgument desc = cannot validate Workflow: spec.arguments.cm-value.value or spec.arguments.cm-value.valueFrom is required" grpc.code=InvalidArgument grpc.method=UpdateCronWorkflow grpc.service=cronworkflow.CronWorkflowService grpc.start_time="2025-06-05T14:04:46Z" grpc.time_ms=3.934 span.kind=server system=grpc
time="2025-06-05T14:04:46.690Z" level=info duration=4.80675ms method=PUT path=/api/v1/cron-workflows/default/hello-world size=127 status=400
time="2025-06-05T14:04:51.619Z" level=info duration="438.542µs" method=GET path=index.html size=487 status=0
time="2025-06-05T14:04:54.289Z" level=info msg="Alloc=15265 TotalAlloc=42420 Sys=35413 NumGC=10 Goroutines=101"
time="2025-06-05T14:05:11.619Z" level=info duration=2.180041ms method=GET path=index.html size=487 status=0
time="2025-06-05T14:05:31.621Z" level=info duration=1.895917ms method=GET path=index.html size=487 status=0
time="2025-06-05T14:05:51.620Z" level=info duration=2.744291ms method=GET path=index.html size=487 status=0
time="2025-06-05T14:06:11.606Z" level=info duration="390.583µs" method=GET path=index.html size=487 status=0
Version(s)
v3.6.10, v3.5.10, 029ce12020430ff4e1d9933cd577f35c8391fcbd
Paste a minimal workflow that reproduces the issue. We must be able to run the workflow; don't enter a workflow that uses private images.
apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
name: hello-world
spec:
schedules:
- "* * * * *"
startingDeadlineSeconds: 0
concurrencyPolicy: "Replace"
successfulJobsHistoryLimit: 4
failedJobsHistoryLimit: 4
suspend: false
workflowSpec:
arguments:
parameters:
- name: cm-value
valueFrom:
configMapKeyRef:
name: cm
key: test
- name: test
value: "test-value"
entrypoint: hello-world-with-time
templates:
- name: hello-world-with-time
container:
image: busybox
command: [echo]
args: ["🕓 hello world. Scheduled on: {{workflow.scheduledTime}}"]
Logs from the workflow controller
-
Logs from in your workflow's wait container
-