kubernetes 如何在argo工作流中访问作为输入工件传递到脚本模板的文件内容

lc8prwob  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(115)

我正在尝试访问作为输入工件传递给脚本模板的文件的内容(json数据)。失败,错误如下NameError: name 'inputs' is not defined. Did you mean: 'input'?
我的工件被存储在awss3 bucket中。我也尝试过使用环境变量而不是直接在脚本模板中引用工件,但是同样不起作用。
以下是我的工作流程

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: output-artifact-s3-
spec:
  entrypoint: main
  templates:
    - name: main
      dag:
        tasks:
          - name: whalesay-script-template
            template: whalesay

          - name: retrieve-output-template
            dependencies: [whalesay-script-template]
            arguments:
              artifacts:
                - name: result
                  from: "{{tasks.whalesay-script-template.outputs.artifacts.message}}"
            template: retrieve-output

    - name: whalesay
      script:
        image: python
        command: [python]
        env:
          - name: OUTDATA
            value: |
              {
              "lb_url" : "<>.us-east-1.elb.amazonaws.com",
              "vpc_id" : "<vpc-id",
              "web_server_count" : "4"
              }
        source: |
          import json
          import os
          OUTDATA = json.loads(os.environ["OUTDATA"])
          with open('/tmp/templates_lst.txt', 'w') as outfile:
            outfile.write(str(json.dumps(OUTDATA)))
        volumeMounts:
          - name: out
            mountPath: /tmp
      volumes:
        - name: out
          emptyDir: { }
      outputs:
        artifacts:
          - name: message
            path: /tmp

    - name: retrieve-output
      inputs:
        artifacts:
          - name: result
            path: /tmp
      script:
        image: python
        command: [python]
        source: |
          import json
          result = {{inputs.artifacts.result}}
          with open(result, 'r') as outfile:
            lines = outfile.read()
            print(lines)
          print('Execution completed')

此工作流中有什么问题?

ljsrvy3e

ljsrvy3e1#

在最后一个模板中,将{{inputs.artifacts.result}}替换为”/tmp/templates_lst.txt”
inputs.artifacts.NAMEsource字段中没有任何意义,所以Argo将其保持原样。Python试图将其解释为代码,这就是为什么会出现异常。
在Argo中,将输入工件传递给Python的正确方法是在模板输入定义中指定工件目的地(您已经完成了),然后在Python中,使用该路径中的文件,就像在任何Python应用程序中一样。

相关问题