diff --git a/USERS.md b/USERS.md index b57e0c796e32..59653fc51c47 100644 --- a/USERS.md +++ b/USERS.md @@ -11,6 +11,7 @@ As the Argo Community grows, we'd like to keep track of our users. Please send a Currently, the following organizations are **officially** using Argo Workflows: 1. [23mofang](https://www.23mofang.com/) +1. [4intelligence](https://4intelligence.com.br/) 1. [7shifts](https://www.7shifts.com) 1. [Acquia](https://www.acquia.com/) 1. [Adevinta](https://www.adevinta.com/) diff --git a/docs/configure-artifact-repository.md b/docs/configure-artifact-repository.md index 9e9dbbc4c3b3..a5f0ceaa1370 100644 --- a/docs/configure-artifact-repository.md +++ b/docs/configure-artifact-repository.md @@ -202,6 +202,8 @@ artifacts: key: secretKey ``` +You can also set `createBucketIfNotPresent` to `true` to tell the artifact driver to automatically create the OSS bucket if it doesn't exist yet when saving artifacts. Note that you'll need to set additional permission for your OSS account to create new buckets. + # Configure the Default Artifact Repository In order for Argo to use your artifact repository, you can configure it as the diff --git a/docs/upgrading.md b/docs/upgrading.md index 8ff200ea6bd3..14e10d957aed 100644 --- a/docs/upgrading.md +++ b/docs/upgrading.md @@ -1,3 +1,4 @@ + # Upgrading Breaking changes typically (sometimes we don't realise they are breaking) have "!" in the commit message, as per @@ -40,6 +41,18 @@ containerRuntimeExecutors: | workflows.argoproj.io/container-runtime-executor: emissary ``` +### [be63efe89](https://github.com/argoproj/argo-workflows/commit/e6fa41a) feat(controller): Expression template tags. Resolves #4548 & #1293 (#5115) + +This PR introduced a new expression syntax know as "expression tag template". A user has reported that this does not +always play nicely with the `when` condition syntax (Goevaluate). + +This can be resolved using a single quote in your when expression: + +``` +when: "'{{inputs.parameters.should-print}}' != '2021-01-01'" +``` + +[Learn more](https://github.com/argoproj/argo-workflows/issues/6314) ## Upgrading to v3.0 diff --git a/docs/workflow-controller-configmap.yaml b/docs/workflow-controller-configmap.yaml index 0c1c29d9e1e7..d9ade04fc53b 100644 --- a/docs/workflow-controller-configmap.yaml +++ b/docs/workflow-controller-configmap.yaml @@ -115,6 +115,9 @@ data: key: secretKey # If this is set to true, argo workflows will use AWS SDK default credentials provider chain. This will allow things like # IRSA and any of the authentication methods that the golang SDK uses in it's default chain. + # If you are using IRSA on AWS, and set this option to true, you will also need to modify Argo-Server Deployment with + # `spec.template.spec.securityContext.fsGroup: 65534` configuration. This is required for IRSA to be able to access + # `/var/run/secrets/eks.amazonaws.com/serviceaccount/token` file, and authenticate with AWS. useSDKCreds: false # Specifies the container runtime interface to use (default: docker) diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index 3490ffce46b3..31565f360650 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -229,13 +229,21 @@ func (woc *wfOperationCtx) operate(ctx context.Context) { woc.updated = wfUpdate if !acquired { woc.log.Warn("Workflow processing has been postponed due to concurrency limit") - woc.wf.Status.Message = msg + phase := woc.wf.Status.Phase + if phase == wfv1.WorkflowUnknown { + phase = wfv1.WorkflowPending + } + woc.markWorkflowPhase(ctx, phase, msg) return } } // Update workflow duration variable - woc.globalParams[common.GlobalVarWorkflowDuration] = fmt.Sprintf("%f", time.Since(woc.wf.Status.StartedAt.Time).Seconds()) + if woc.wf.Status.StartedAt.IsZero() { + woc.globalParams[common.GlobalVarWorkflowDuration] = fmt.Sprintf("%f", time.Duration(0).Seconds()) + } else { + woc.globalParams[common.GlobalVarWorkflowDuration] = fmt.Sprintf("%f", time.Since(woc.wf.Status.StartedAt.Time).Seconds()) + } // Populate the phase of all the nodes prior to execution for _, node := range woc.wf.Status.Nodes { diff --git a/workflow/controller/operator_test.go b/workflow/controller/operator_test.go index dda5526c6f23..43010e234402 100644 --- a/workflow/controller/operator_test.go +++ b/workflow/controller/operator_test.go @@ -148,6 +148,37 @@ spec: }), "zero node durations empty") } +func TestGlobalParamDuration(t *testing.T) { + wf := wfv1.MustUnmarshalWorkflow(` +metadata: + name: my-wf + namespace: my-ns +spec: + entrypoint: main + templates: + - name: main + dag: + tasks: + - name: pod + template: pod + - name: pod + container: + image: my-image +`) + cancel, controller := newController(wf) + defer cancel() + + ctx := context.Background() + woc := newWorkflowOperationCtx(wf, controller) + woc.operate(ctx) + assert.Equal(t, woc.globalParams[common.GlobalVarWorkflowDuration], "0.000000") + + makePodsPhase(ctx, woc, apiv1.PodSucceeded) + woc = newWorkflowOperationCtx(woc.wf, controller) + woc.operate(ctx) + assert.Greater(t, woc.globalParams[common.GlobalVarWorkflowDuration], "0.000000") +} + func TestEstimatedDuration(t *testing.T) { wf := wfv1.MustUnmarshalWorkflow(` metadata: