我正在尝试访问作为输入工件传递给脚本模板的文件的内容(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')
此工作流中有什么问题?
1条答案
按热度按时间ljsrvy3e1#
在最后一个模板中,将
{{inputs.artifacts.result}}
替换为”/tmp/templates_lst.txt”
。inputs.artifacts.NAME
在source
字段中没有任何意义,所以Argo将其保持原样。Python试图将其解释为代码,这就是为什么会出现异常。在Argo中,将输入工件传递给Python的正确方法是在模板输入定义中指定工件目的地(您已经完成了),然后在Python中,使用该路径中的文件,就像在任何Python应用程序中一样。