如何访问作为输入工件传递给 argo 工作流中的脚本模板的文件内容
How to access a content of file which is passed as input artifact to a script template in argo workflows
我正在尝试访问作为输入项目传递给脚本模板的文件的内容(json 数据)。它因以下错误而失败 NameError: name 'inputs' is not defined. Did you mean: 'input'?
我的工件存储在 aws s3 存储桶中。我也尝试过使用环境变量而不是直接在脚本模板中直接引用工件,但它也不起作用。
这是我的工作流程
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')
这个工作流程有什么问题?
在最后一个模板中,将 {{inputs.artifacts.result}}
替换为 ”/tmp/templates_lst.txt”
。
inputs.artifacts.NAME
在 source
字段中没有意义,所以 Argo 保持原样。 Python 尝试将其解释为代码,这就是您得到异常的原因。
在 Argo 中将输入工件传递给 Python 的正确方法是在模板输入定义中指定工件目的地(您已经完成)。然后在 Python 中,使用该路径中的文件,就像在任何 Python 应用程序中一样。
我正在尝试访问作为输入项目传递给脚本模板的文件的内容(json 数据)。它因以下错误而失败 NameError: name 'inputs' is not defined. Did you mean: 'input'?
我的工件存储在 aws s3 存储桶中。我也尝试过使用环境变量而不是直接在脚本模板中直接引用工件,但它也不起作用。
这是我的工作流程
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')
这个工作流程有什么问题?
在最后一个模板中,将 {{inputs.artifacts.result}}
替换为 ”/tmp/templates_lst.txt”
。
inputs.artifacts.NAME
在 source
字段中没有意义,所以 Argo 保持原样。 Python 尝试将其解释为代码,这就是您得到异常的原因。
在 Argo 中将输入工件传递给 Python 的正确方法是在模板输入定义中指定工件目的地(您已经完成)。然后在 Python 中,使用该路径中的文件,就像在任何 Python 应用程序中一样。