argo-workflows icon indicating copy to clipboard operation
argo-workflows copied to clipboard

Can't update CronWorkflow parameter using WebUI when one of the parameters is using valueFrom

Open djanjic opened this issue 7 months ago • 0 comments

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)

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:

  1. Create a new CronWorkflow from the example below
  2. Go to the newly created CronWF
  3. Go to Workflow tab
  4. Update test parameter
  5. Click the Update button
Image

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

-

djanjic avatar Jun 05 '25 14:06 djanjic