kandi background
Explore Kits

argo-workflows | Workflow engine for Kubernetes | BPM library

 by   argoproj Go Version: v3.3.2 License: Apache-2.0

 by   argoproj Go Version: v3.3.2 License: Apache-2.0

Download this library from

kandi X-RAY | argo-workflows Summary

argo-workflows is a Go library typically used in Automation, BPM applications. argo-workflows has no vulnerabilities, it has a Permissive License and it has medium support. However argo-workflows has 1276 bugs. You can download it from GitHub.
Argo Workflows is an open source container-native workflow engine for orchestrating parallel jobs on Kubernetes. Argo Workflows is implemented as a Kubernetes CRD (Custom Resource Definition). Argo is a Cloud Native Computing Foundation (CNCF) hosted project.
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • argo-workflows has a medium active ecosystem.
  • It has 10889 star(s) with 2160 fork(s). There are 198 watchers for this library.
  • There were 4 major release(s) in the last 6 months.
  • There are 483 open issues and 3652 have been closed. On average issues are closed in 161 days. There are 13 open pull requests and 0 closed requests.
  • It has a neutral sentiment in the developer community.
  • The latest version of argo-workflows is v3.3.2
argo-workflows Support
Best in #BPM
Average in #BPM
argo-workflows Support
Best in #BPM
Average in #BPM

quality kandi Quality

  • argo-workflows has 1276 bugs (1275 blocker, 0 critical, 1 major, 0 minor) and 2880 code smells.
argo-workflows Quality
Best in #BPM
Average in #BPM
argo-workflows Quality
Best in #BPM
Average in #BPM

securitySecurity

  • argo-workflows has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
  • argo-workflows code analysis shows 0 unresolved vulnerabilities.
  • There are 0 security hotspots that need review.
argo-workflows Security
Best in #BPM
Average in #BPM
argo-workflows Security
Best in #BPM
Average in #BPM

license License

  • argo-workflows is licensed under the Apache-2.0 License. This license is Permissive.
  • Permissive licenses have the least restrictions, and you can use them in most projects.
argo-workflows License
Best in #BPM
Average in #BPM
argo-workflows License
Best in #BPM
Average in #BPM

buildReuse

  • argo-workflows releases are available to install and integrate.
  • Installation instructions are not available. Examples and code snippets are available.
  • It has 237874 lines of code, 10271 functions and 1414 files.
  • It has high code complexity. Code complexity directly impacts maintainability of the code.
argo-workflows Reuse
Best in #BPM
Average in #BPM
argo-workflows Reuse
Best in #BPM
Average in #BPM
Top functions reviewed by kandi - BETA

kandi has reviewed argo-workflows and discovered the below as its top functions. This is intended to give you an instant insight into argo-workflows implemented functionality, and help decide if they suit your requirements.

  • Checks the validity of the input value .
  • Calls the API .
  • Validate and convert input_value to required types .
  • Instantiate a new instance of the given class .
  • Validate all the properties of this schema
  • Calls an API call .
  • Return a OneOfSchema instance from the model .
  • Initialize an OpenApiModel from keyword arguments .
  • Convert a model instance to a python dictionary .
  • Attempts to convert the given value to an appropriate object .

argo-workflows Key Features

UI to visualize and manage Workflows

Artifact support (S3, Artifactory, Alibaba Cloud OSS, HTTP, Git, GCS, raw)

Workflow templating to store commonly used Workflows in the cluster

Archiving Workflows after executing for later access

Scheduled workflows using cron

Server interface with REST API (HTTP and GRPC)

DAG or Steps based declaration of workflows

Step level input & outputs (artifacts/parameters)

Loops

Parameterization

Conditionals

Timeouts (step & workflow level)

Retry (step & workflow level)

Resubmit (memoized)

Suspend & Resume

Cancellation

K8s resource orchestration

Exit Hooks (notifications, cleanup)

Garbage collection of completed workflow

Scheduling (affinity/tolerations/node selectors)

Volumes (ephemeral/existing)

Parallelism limits

Daemoned steps

DinD (docker-in-docker)

Script steps

Event emission

Prometheus metrics

Multiple executors

Multiple pod and workflow garbage collection strategies

Automatically calculated resource usage per step

Java/Golang/Python SDKs

Pod Disruption Budget support

Single-sign on (OAuth2/OIDC)

Webhook triggering

CLI

Out-of-the box and custom Prometheus metrics

Windows container support

Embedded widgets

Multiplex log viewer

Quickstart

copy iconCopydownload iconDownload
kubectl create namespace argo
kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflows/master/manifests/install.yaml

How do I use Argo Workflows Using Previous Step Outputs As Inputs?

copy iconCopydownload iconDownload
- name: print1
  arguments:
    artifacts: [{name: results, from: "{{tasks.whalesay.outputs.artifacts.msg}}"}]
- name: input1
  inputs:
    artifacts:
    - name: result
      path: /tmp/raw
...
import sys

sys.stdout.write("{{inputs.artifacts.result}}\n")
import os

os.system("cat {{inputs.artifacts.result}}\n")
-----------------------
- name: print1
  arguments:
    artifacts: [{name: results, from: "{{tasks.whalesay.outputs.artifacts.msg}}"}]
- name: input1
  inputs:
    artifacts:
    - name: result
      path: /tmp/raw
...
import sys

sys.stdout.write("{{inputs.artifacts.result}}\n")
import os

os.system("cat {{inputs.artifacts.result}}\n")
-----------------------
- name: print1
  arguments:
    artifacts: [{name: results, from: "{{tasks.whalesay.outputs.artifacts.msg}}"}]
- name: input1
  inputs:
    artifacts:
    - name: result
      path: /tmp/raw
...
import sys

sys.stdout.write("{{inputs.artifacts.result}}\n")
import os

os.system("cat {{inputs.artifacts.result}}\n")
-----------------------
- name: print1
  arguments:
    artifacts: [{name: results, from: "{{tasks.whalesay.outputs.artifacts.msg}}"}]
- name: input1
  inputs:
    artifacts:
    - name: result
      path: /tmp/raw
...
import sys

sys.stdout.write("{{inputs.artifacts.result}}\n")
import os

os.system("cat {{inputs.artifacts.result}}\n")

Argo Workflow to continue processing during fan-out

copy iconCopydownload iconDownload
apiVersion: argoproj.io/v1alpha1
kind: Workflow
spec:
  templates:
    - name: main
      steps:
        - - name: A
            template: A
        - - name: B_C
            template: B_C
            arguments:
              parameters:
                - name: item
                  value: "{{item}}"
            withParam: "{{steps.A.outputs.parameters.items}}"
        - - name: D
            template: D
    - name: A
      # container or script spec here
      outputs:
        parameters:
          - name: items
            valueFrom:
              path: /tmp/items.json
    - name: B_C
      inputs:
        parameters:
          - name: item
      steps:
        - - name: B
            template: B
            arguments:
              parameters:
                - name: item
                  value: "{{inputs.parameters.item}}"
        - - name: C
            template: C
            arguments:
              artifacts:
                - name: file
                  from: "{{steps.B.outputs.artifacts.file}}"
    - name: B
      inputs:
        parameters:
          - name: item
      # container or script spec here
      outputs:
        artifacts:
          - name: file
            path: /tmp/file
    - name: C
      inputs:
        artifacts:
          - name: file
      # container or script spec here
    - name: D
      # container or script spec here

Dynamically provide an image name for the container template

copy iconCopydownload iconDownload
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: test-dynamic-image-
spec:
  entrypoint: main

  templates:
  - name: main
    steps:
    - - name: fanout-step
        template: fanout
    - - name: loop-step
        template: options
        arguments:
          parameters:
          - name: code
            value: "{{item}}"
        withParam: "{{steps.code-step.outputs.parameters.codes}}"

  - name: fanout
    script:
      image: python:alpine3.6
      command: [python]
      source: |
        import json
        with open("/tmp/codes.json", 'w') as wf:
          json.dump(["foo", "bar", "buz"], wf)
    outputs:
      parameters:
        - name: codes
          valueFrom:
            path: /tmp/codes.json

  - name: foo-code
    script:
      image: python:alpine3.6
      command: [ python ]
      source: |
        print("foo-code")

  - name: bar-code
    script:
      image: python:alpine3.6
      command: [ python ]
      source: |
        print("bar-code")

  - name: buz-code
    script:
      image: python:alpine3.6
      command: [ python ]
      source: |
        print("buz-code")

  - name: missed-code
    script:
      image: python:alpine3.6
      command: [ python ]
      source: |
        print("THIS SHOULD NOT BE PRINTED")

  - name: options
    inputs:
      parameters:
        - name: code
    steps:
    - - name: foo-code-option
        template: foo-code
        when: "{{inputs.parameters.code}} == foo"
      - name: bar-code-option
        template: bar-code
        when: "{{inputs.parameters.code}} == bar"
      - name: buz-code-option
        template: buz-code
        when: "{{inputs.parameters.code}} == buz"
      - name: missed-code-option
        template: missed-code
        when: "{{inputs.parameters.code}} == missed"
-----------------------
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
spec:
  entrypoint: whalesay
  templates:
  - name: whalesay
    inputs:
      parameters:
        - name: image
          default: whalesay:latest
    container:
      image: "docker/{{inputs.parameters.image}}"
      command: [cowsay]
      args: ["hello world"]

Retrying after a settable delay in Argo Workflows

copy iconCopydownload iconDownload
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: exit-handler-with-pause-
spec:
  arguments:
    parameters
    - name: pause-before-retry-seconds
      value: "60"
  entrypoint: intentional-fail
  onExit: exit-handler
  - name: intentional-fail
    container:
      image: alpine:latest
      command: [sh, -c]
      args: ["echo intentional failure; exit 1"]
  - name: exit-handler
    steps:
    - - name: pause
        template: pause
        when: "{{workflow.status}} != Succeeded"
  - name: pause
    container:
      image: alpine:latest
      env:
      - name: SECONDS
        value: "{{workflow.parameters.pause-before-retry-seconds}}"
      command: [sh, -c]
      args:
      - >-
        echo "Pausing before retry..."
        sleep "$SECONDS"

Argo(events) Trigger an existing ClusterWorkflowTemplate using Sensor

copy iconCopydownload iconDownload
# kubectl apply -f ./k8s/workflow-service-account.yml
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: argo-events
  name: operate-workflow-sa
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: operate-workflow-role
  # namespace: argo-events
rules:
  - apiGroups:
      - argoproj.io
    verbs:
      - "*"
    resources:
      - workflows
      - clusterworkflowtemplates
      - workflowtemplates
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: operate-workflow-role-binding
  namespace: argo-events
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: operate-workflow-role
subjects:
  - kind: ServiceAccount
    name: operate-workflow-sa
    namespace: argo-events
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: workflow
  namespace: argo-events
  finalizers:
    - sensor-controller
spec:
  template:
    serviceAccountName: operate-workflow-sa
  dependencies:
    - name: http-post-trigger
      eventSourceName: webhook
      eventName: example
  triggers:
    # https://github.com/argoproj/argo-events/blob/master/api/sensor.md#triggertemplate
    - template:
        name: workflow-trigger-1
        argoWorkflow:
          # https://github.com/argoproj/argo-events/blob/master/api/sensor.md#argoproj.io/v1alpha1.ArgoWorkflowTrigger
          group: argoproj.io
          version: v1alpha1
          resource: Workflow
          operation: submit
          metadata:
            generateName: cluster-workflow-template-hello-world-
          source:
            resource:
              apiVersion: argoproj.io/v1alpha1
              kind: Workflow
              metadata:
                name: special-trigger
              spec:
                serviceAccountName: operate-workflow-sa
                entrypoint: whalesay-template
                workflowTemplateRef:
                  name: whalesay-template
                  clusterScope: true
-----------------------
# kubectl apply -f ./k8s/workflow-service-account.yml
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: argo-events
  name: operate-workflow-sa
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: operate-workflow-role
  # namespace: argo-events
rules:
  - apiGroups:
      - argoproj.io
    verbs:
      - "*"
    resources:
      - workflows
      - clusterworkflowtemplates
      - workflowtemplates
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: operate-workflow-role-binding
  namespace: argo-events
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: operate-workflow-role
subjects:
  - kind: ServiceAccount
    name: operate-workflow-sa
    namespace: argo-events
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: workflow
  namespace: argo-events
  finalizers:
    - sensor-controller
spec:
  template:
    serviceAccountName: operate-workflow-sa
  dependencies:
    - name: http-post-trigger
      eventSourceName: webhook
      eventName: example
  triggers:
    # https://github.com/argoproj/argo-events/blob/master/api/sensor.md#triggertemplate
    - template:
        name: workflow-trigger-1
        argoWorkflow:
          # https://github.com/argoproj/argo-events/blob/master/api/sensor.md#argoproj.io/v1alpha1.ArgoWorkflowTrigger
          group: argoproj.io
          version: v1alpha1
          resource: Workflow
          operation: submit
          metadata:
            generateName: cluster-workflow-template-hello-world-
          source:
            resource:
              apiVersion: argoproj.io/v1alpha1
              kind: Workflow
              metadata:
                name: special-trigger
              spec:
                serviceAccountName: operate-workflow-sa
                entrypoint: whalesay-template
                workflowTemplateRef:
                  name: whalesay-template
                  clusterScope: true

Argo Workflow error when using envFrom field

copy iconCopydownload iconDownload
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: my-template
spec:
  entrypoint: main
  templates:
    - name: main
      inputs:
        parameters:
          - name: configmap
          - name: secret
      container:
        image: my-image:1.2.3
        envFrom:
          - configMapRef:
              name: "{{inputs.parameters.configmap}}"
          - secretRef:
              name: "{{inputs.parameters.secret}}"

---

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: my-workflow-
spec:
  entrypoint: main
  arguments:
    parameters:
      - name: configmap
        value: my-configmap
      - name: secret
        value: my-secret
  templates:
    - name: main
      steps:
        - - name: main
            templateRef:
              name: my-template
              template: main
            arguments:
              parameters:
                - name: configmap
                  value: "{{workflow.parameters.configmap}}"
                - name: secret
                  value: "{{workflow.parameters.secret}}"

How to prevent Argo Workflow from being resubmitted if it is already running?

copy iconCopydownload iconDownload
apiVersion: v1
kind: ConfigMap
metadata:
 name: my-config
data:
  workflow: "1"  # Only one workflow can run at given time in particular namespace

---

apiVersion: argoproj.io/v1alpha1
kind: Workflow 
metadata:
  name: hello-world
spec:
  entrypoint: whalesay
  synchronization:
    semaphore:
      configMapKeyRef:
        name: my-config
        key: workflow
  templates:
  - name: whalesay
    container:
      image: docker/whalesay
# ...

Accessing argo workflow archive via http leads to permission denied error

copy iconCopydownload iconDownload
curl http://localhost:2746/api/v1/archived-workflows?listOptions.fieldSelector=metadata.namespace=argo -H "Authorization: $ARGO_TOKEN"

Community Discussions

Trending Discussions on argo-workflows
  • Argo workflows is trying to save the artifact to /var/run/argo/outputs/artifacts. Where is this specified?
  • How do I use Argo Workflows Using Previous Step Outputs As Inputs?
  • Difference between namespace install vs managed namespace install in Argo Workflows?
  • Argo Workflow to continue processing during fan-out
  • How does the Argo Workflows CLI get permissions?
  • Dynamically provide an image name for the container template
  • Retrying after a settable delay in Argo Workflows
  • Dynamic "Fan-In" for artifact outputs in Argo?
  • How can I delete the Argo events launched in the Argo namespace?
  • Is there a way to gracefully end a pod with the Kubernetes client-go?
Trending Discussions on argo-workflows

QUESTION

Argo workflows is trying to save the artifact to /var/run/argo/outputs/artifacts. Where is this specified?

Asked 2022-Mar-18 at 11:45

I found Argo lint today. Thank you to the Argo team!!! This is a very useful tool and has saved me tons of time. The following yaml checks out with no errors, but when I try to run it, I get the following error. How can I track down what is happening?

FATA[2022-03-14T19:36:29.512Z] workflows.argoproj.io "hello-world-s5rm5" not found

Here is the workflow

---
{
   "apiVersion": "argoproj.io/v1alpha1",
   "kind": "Workflow",
   "metadata": {
      "annotations": {
         "workflows.argoproj.io/description": "testing a linter",
         "workflows.argoproj.io/version": ">= 3.1.0"
      },
      "labels": {
         "workflows.argoproj.io/archive-strategy": "false"
      },
      "generateName": "hello-world-",
      "namespace": "sandbox"
   },
   "spec": {
      "arguments": {
         "parameters": [
            {
               "name": "msg",
               "value": "Hello there"
            }
         ]
      },
      "entrypoint": "entrypoint",
      "securityContext": {
         "fsGroup": 2000,
         "fsGroupChangePolicy": "OnRootMismatch",
         "runAsGroup": 3000,
         "runAsNonRoot": true,
         "runAsUser": 1000
      },
      "templates": [
         {
            "container": {
               "args": [
                  "cowsay Hello Test >> {{outputs.artifacts.message}}"
               ],
               "command": [
                  "sh",
                  "-c"
               ],
               "image": "docker/whalesay:latest",
               "imagePullPolicy": "IfNotPresent",
            },
            "name": "whalesay",
            "outputs": {
               "artifacts": [
                  {
                     "name": "message",
                     "path": "/tmp/output.tgz",
                     "s3": {
                        "key": "whalesay",
                     }
                  }
               ]
            },
            "retryStrategy": {
               "limit": "10"
            },
            "securityContext": {
               "fsGroup": 2000,
               "fsGroupChangePolicy": "OnRootMismatch",
               "runAsGroup": 3000,
               "runAsNonRoot": true,
               "runAsUser": 1000
            }
         },
         {
            "inputs": {
               "artifacts": [
                  {
                     "s3": {
                        "key": "whalesay",
                     },
                     "name": "data",
                     "path": "/tmp/input"
                  }
               ]
            },
            "name": "print",
            "retryStrategy": {
               "limit": "10"
            },
            "script": {
               "command": [
                  "python"
               ],
               "image": "python:alpine3.6",
               "imagePullPolicy": "IfNotPresent",
               "source": "import sys \nsys.stdout.write(\"{{inputs.artifacts.data}}\")\n\n"
            },
            "securityContext": {
               "fsGroup": 2000,
               "fsGroupChangePolicy": "OnRootMismatch",
               "runAsGroup": 3000,
               "runAsNonRoot": true,
               "runAsUser": 1000
            }
         },
         {
            "dag": {
               "tasks": [
                  {
                     "name": "whalesay",
                     "template": "whalesay"
                  },
                  {
                     "arguments": {
                        "artifacts": [
                           {
                              "from": "{{whalesay.outputs.artifacts.message}}",
                              "name": "data"
                           }
                        ]
                     },
                     "dependencies": [
                        "whalesay"
                     ],
                     "name": "print",
                     "template": "print"
                  }
               ]
            },
            "name": "entrypoint"
         }
      ]
   }
}
...

Here is the result of kubectl describe

Name:         hello-world
Namespace:    sandbox
Labels:       workflows.argoproj.io/archive-strategy=false
Annotations:  workflows.argoproj.io/description: testing a linter
              workflows.argoproj.io/version: >= 3.1.0
API Version:  argoproj.io/v1alpha1
Kind:         Workflow
Metadata:
  Creation Timestamp:  2022-03-14T19:33:19Z
  Generation:          1
  Managed Fields:
    API Version:  argoproj.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .:
          f:workflows.argoproj.io/description:
          f:workflows.argoproj.io/version:
        f:labels:
          .:
          f:workflows.argoproj.io/archive-strategy:
      f:spec:
      f:status:
    Manager:         argo
    Operation:       Update
    Time:            2022-03-14T19:33:19Z
  Resource Version:  16499078
  UID:               b438cf44-241c-44bf-bb42-e470eaf4ca08
Spec:
  Arguments:
    Parameters:
      Name:    msg
      Value:   Hello there
  Entrypoint:  entrypoint
  Security Context:
    Fs Group:                2000
    Fs Group Change Policy:  OnRootMismatch
    Run As Group:            3000
    Run As Non Root:         true
    Run As User:             1000
  Templates:
    Container:
      Args:
        cowsay Hello Test >> {{outputs.artifacts.message}}
      Command:
        sh
        -c
      Image:              docker/whalesay:latest
      Image Pull Policy:  IfNotPresent
      Name:               
      Resources:
    Inputs:
    Metadata:
    Name:  whalesay
    Outputs:
      Artifacts:
        Name:  message
        Path:  /tmp/output.tgz
        s3:
          Key:  whalesay
    Retry Strategy:
      Limit:  10
    Security Context:
      Fs Group:                2000
      Fs Group Change Policy:  OnRootMismatch
      Run As Group:            3000
      Run As Non Root:         true
      Run As User:             1000
    Inputs:
      Artifacts:
        Name:  data
        Path:  /tmp/input
        s3:
          Key:  whalesay
    Metadata:
    Name:  print
    Outputs:
    Retry Strategy:
      Limit:  10
    Script:
      Command:
        python
      Image:              python:alpine3.6
      Image Pull Policy:  IfNotPresent
      Name:               
      Resources:
      Source:  import sys 
sys.stdout.write("{{inputs.artifacts.data}}")


    Security Context:
      Fs Group:                2000
      Fs Group Change Policy:  OnRootMismatch
      Run As Group:            3000
      Run As Non Root:         true
      Run As User:             1000
    Dag:
      Tasks:
        Arguments:
        Name:      whalesay
        Template:  whalesay
        Arguments:
          Artifacts:
            From:  {{whalesay.outputs.artifacts.message}}
            Name:  data
        Dependencies:
          whalesay
        Name:      print
        Template:  print
    Inputs:
    Metadata:
    Name:  entrypoint
    Outputs:
Status:
  Finished At:  <nil>
  Started At:   <nil>
Events:         <none>

UPDATE:

I have re-installed (upgraded) Argo and made some progress. The error (below) suggests that I have set up my Artifact repository wrong. I am following instructions found here to the best of my understanding.

The Google technical support folks are telling me that my GCS bucket is configured for read only. I am conversing with them on how to open the bucket for writing. Once that is done, am I correct that updating the configmap is sufficient?

https://argoproj.github.io/argo-workflows/configure-artifact- and repository/#google-cloud-storage-gcs

https://argoproj.github.io/argo-workflows/artifact-repository-ref/

Another Update:

Thanks to the Google help folks, I think I have cloud storage configured (I think), but I cannot yet confirm. I am getting the following error (full stack below.

Question: Where is the prefix "/var/run/argo/outputs/artifacts" specified? I have not encountered this before.

What is the proper way to reconcile this automatic insertion in the workflow?

 open /var/run/argo/outputs/artifacts/tmp/output.tgz.tgz: no such file or directory
                      hello-worldnztr8-4118214805 (v1:metadata.name)
      ARGO_CONTAINER_RUNTIME_EXECUTOR:    emissary
      GODEBUG:                            x509ignoreCN=0
      ARGO_WORKFLOW_NAME:                 hello-worldnztr8
      ARGO_WORKFLOW_UID:                  4ed3e706-48d9-4d22-bf73-fcccc4a4e6d0
      ARGO_CONTAINER_NAME:                init
      ARGO_TEMPLATE:                      {"name":"whalesay","inputs":{},"outputs":{"artifacts":[{"name":"message","path":"/tmp/output.tgz","s3":{"key":"whalesay"}}]},"metadata":{},"container":{"name":"","image":"docker/whalesay:latest","command":["sh","-c"],"args":["cowsay Hello Test \u003e\u003e {{outputs.artifacts.message}}"],"resources":{},"imagePullPolicy":"IfNotPresent"},"archiveLocation":{"archiveLogs":false},"retryStrategy":{"limit":"10"},"securityContext":{"runAsUser":1000,"runAsGroup":3000,"runAsNonRoot":true,"fsGroup":2000,"fsGroupChangePolicy":"OnRootMismatch"}}
      ARGO_NODE_ID:                       hello-worldnztr8-4118214805
      ARGO_INCLUDE_SCRIPT_OUTPUT:         false
      ARGO_DEADLINE:                      0001-01-01T00:00:00Z
      ARGO_PROGRESS_FILE:                 /var/run/argo/progress
      ARGO_PROGRESS_PATCH_TICK_DURATION:  1m0s
      ARGO_PROGRESS_FILE_TICK_DURATION:   3s
    Mounts:
      /var/run/argo from var-run-argo (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-tvh6k (ro)
Containers:
  wait:
    Container ID:  containerd://6593d624b0350cc51a739e19d78f39e5726a9f1dfddc7e8995b082a073f57864
    Image:         quay.io/argoproj/argoexec:v3.3.0
    Image ID:      quay.io/argoproj/argoexec@sha256:b37739320a21d1d96789082c659b96f2dcb59c51483d9852bc858f6cfddf82fb
    Port:          <none>
    Host Port:     <none>
    Command:
      argoexec
      wait
      --loglevel
      info
    State:          Terminated
      Reason:       Error
      Message:      open /var/run/argo/outputs/artifacts/tmp/output.tgz.tgz: no such file or directory
      Exit Code:    1
      Started:      Wed, 16 Mar 2022 20:42:36 +0000
      Finished:     Wed, 16 Mar 2022 20:42:37 +0000
    Ready:          False
    Restart Count:  0
    Environment:
      ARGO_POD_NAME:                      hello-worldnztr8-4118214805 (v1:metadata.name)
      ARGO_CONTAINER_RUNTIME_EXECUTOR:    emissary
      GODEBUG:                            x509ignoreCN=0
      ARGO_WORKFLOW_NAME:                 hello-worldnztr8
      ARGO_WORKFLOW_UID:                  4ed3e706-48d9-4d22-bf73-fcccc4a4e6d0
      ARGO_CONTAINER_NAME:                wait
      ARGO_TEMPLATE:                      {"name":"whalesay","inputs":{},"outputs":{"artifacts":[{"name":"message","path":"/tmp/output.tgz","s3":{"key":"whalesay"}}]},"metadata":{},"container":{"name":"","image":"docker/whalesay:latest","command":["sh","-c"],"args":["cowsay Hello Test \u003e\u003e {{outputs.artifacts.message}}"],"resources":{},"imagePullPolicy":"IfNotPresent"},"archiveLocation":{"archiveLogs":false},"retryStrategy":{"limit":"10"},"securityContext":{"runAsUser":1000,"runAsGroup":3000,"runAsNonRoot":true,"fsGroup":2000,"fsGroupChangePolicy":"OnRootMismatch"}}
      ARGO_NODE_ID:                       hello-worldnztr8-4118214805
      ARGO_INCLUDE_SCRIPT_OUTPUT:         false
      ARGO_DEADLINE:                      0001-01-01T00:00:00Z
      ARGO_PROGRESS_FILE:                 /var/run/argo/progress
      ARGO_PROGRESS_PATCH_TICK_DURATION:  1m0s
      ARGO_PROGRESS_FILE_TICK_DURATION:   3s
    Mounts:
      /var/run/argo from var-run-argo (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-tvh6k (ro)
  main:
    Container ID:  containerd://c1c3c014b6c975b5702da564f76a4f5026352bc1f3b57f7dc4d1738104ee7ab8
    Image:         docker/whalesay:latest
    Image ID:      sha256:c717279bbba020bf95ac72cf47b2c8abb3a383ad4b6996c1a7a9f2a7aaa480ad
    Port:          <none>
    Host Port:     <none>
    Command:
      /var/run/argo/argoexec
      emissary
      --
      sh
      -c
    Args:
      cowsay Hello Test >> {{outputs.artifacts.message}}
    State:          Terminated
      Reason:       Error
      Exit Code:    2
      Started:      Wed, 16 Mar 2022 20:42:36 +0000
      Finished:     Wed, 16 Mar 2022 20:42:36 +0000
    Ready:          False
    Restart Count:  0
    Environment:
      ARGO_CONTAINER_NAME:                main
      ARGO_TEMPLATE:                      {"name":"whalesay","inputs":{},"outputs":{"artifacts":[{"name":"message","path":"/tmp/output.tgz","s3":{"key":"whalesay"}}]},"metadata":{},"container":{"name":"","image":"docker/whalesay:latest","command":["sh","-c"],"args":["cowsay Hello Test \u003e\u003e {{outputs.artifacts.message}}"],"resources":{},"imagePullPolicy":"IfNotPresent"},"archiveLocation":{"archiveLogs":false},"retryStrategy":{"limit":"10"},"securityContext":{"runAsUser":1000,"runAsGroup":3000,"runAsNonRoot":true,"fsGroup":2000,"fsGroupChangePolicy":"OnRootMismatch"}}
      ARGO_NODE_ID:                       hello-worldnztr8-4118214805
      ARGO_INCLUDE_SCRIPT_OUTPUT:         false
      ARGO_DEADLINE:                      0001-01-01T00:00:00Z
      ARGO_PROGRESS_FILE:                 /var/run/argo/progress
      ARGO_PROGRESS_PATCH_TICK_DURATION:  1m0s
      ARGO_PROGRESS_FILE_TICK_DURATION:   3s
    Mounts:
      /var/run/argo from var-run-argo (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-tvh6k (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  var-run-argo:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  kube-api-access-tvh6k:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  55s   default-scheduler  Successfully assigned default/hello-worldnztr8-4118214805 to gke-cluster-1-default-pool-d262cd84-va7g
  Normal  Pulled     55s   kubelet            Container image "quay.io/argoproj/argoexec:v3.3.0" already present on machine
  Normal  Created    54s   kubelet            Created container init
  Normal  Started    54s   kubelet            Started container init
  Normal  Pulled     53s   kubelet            Container image "quay.io/argoproj/argoexec:v3.3.0" already present on machine
  Normal  Created    53s   kubelet            Created container wait
  Normal  Started    53s   kubelet            Started container wait
  Normal  Pulled     53s   kubelet            Container image "docker/whalesay:latest" already present on machine
  Normal  Created    53s   kubelet            Created container main
  Normal  Started    53s   kubelet            Started container main

ANSWER

Answered 2022-Mar-18 at 11:45

The complete fix is detailed here https://github.com/argoproj/argo-workflows/issues/8168#event-6261265751

for purposes of this discussion, the output must be the explicit location (not a placeholder) e.g. /tmp/ouput

I think the standard is that you do not put the .tgz suffix in the output location, but that is not yet confirmed as there was another fix involved. Perhaps someone from the Argo team can confirm this.

Source https://stackoverflow.com/questions/71473378

Community Discussions, Code Snippets contain sources that include Stack Exchange Network

Vulnerabilities

No vulnerabilities reported

Install argo-workflows

You can download it from GitHub.

Support

Get started hereHow to write Argo Workflow specsHow to configure your artifact repository

DOWNLOAD this Library from

Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

Explore Related Topics

Share this Page

share link
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

  • © 2022 Open Weaver Inc.