Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes Jobspec传递Json参数:为什么这是无效的Yaml以及如何修复?_Json_Kubernetes_Yaml - Fatal编程技术网

Kubernetes Jobspec传递Json参数:为什么这是无效的Yaml以及如何修复?

Kubernetes Jobspec传递Json参数:为什么这是无效的Yaml以及如何修复?,json,kubernetes,yaml,Json,Kubernetes,Yaml,我正在尝试运行调用python应用程序的作业,这些应用程序使用字典作为参数 例如,在本地运行它可能如下所示: python3 examples/test.py '{"school":"EFG", "standard": "2", "name": "abc", "city": "miami"}' 因此,在我的工作规范中,我试图做到: c

我正在尝试运行调用python应用程序的作业,这些应用程序使用字典作为参数

例如,在本地运行它可能如下所示:

 python3 examples/test.py '{"school":"EFG", "standard": "2", "name": "abc", "city": "miami"}'
因此,在我的工作规范中,我试图做到:

command: ["/bin/bash","-c"]
args: ["python3 examples/test.py '{"school":"EFG", "standard": "2", "name": "abc", "city": "miami"}'"]
但是,我得到一个yaml错误:

error: error parsing job.yaml.tmpl: error converting YAML to JSON: yaml: line 18: could not find expected ':'
我在yaml lint中看到它是无效的。我成功通过yaml验证的唯一方法是转义每个报价,这对于用户将运行的数百个作业来说是不可伸缩的

args: 
  - "python3 examples/test.py '{\"school\":\"hello\", \"standard\": \"5\"}'"

为什么这不是有效的yaml?我如何做到这一点而不需要转义用户传入的给定词典中的每个引号?

如果没有代码,很难复制您的设置,但是下面的示例应该适合您。在Kubernetes文档中,您可以找到所有命令都应该
包装的信息

在某些情况下,您需要在shell中运行命令。例如,您的命令可能由多个管道连接在一起的命令组成,也可能是一个shell脚本。要在shell中运行命令,请将其包装

下面是默认语法

command: ["/bin/sh","-c"]
args: ["command one; command two && command three"]
我对你的命令做了一点修改,并继续验证,都通过了

命令中仅包含
/bin/bash
的示例:

command: 
  - /bin/bash
args: 
  - "-c"
  - "python3 examples/test.py '{\"school\":\"EFG\", \"standard\": \"2\", \"name\": \"abc\", \"city\": \"miami\"}'\"]"

or

command: ["/bin/bash"]
args: ["-c", "python3 examples/test.py", '{"school":"EFG", "standard": "2", "name": "abc", "city": "miami"}']
command: 
  - /bin/bash
  - "-c"
args: 
  - "python3 examples/test.py"
  - "{\"school\":\"EFG\", \"standard\": \"2\", \"name\": \"abc\", \"city\": \"miami\"}"

or

command: ["/bin/bash", "-c"]
args: ["python3 examples/test.py", '{"school":"EFG", "standard": "2", "name": "abc", "city": "miami"}']
命令中使用
/bin/bash
-c
的示例:

command: 
  - /bin/bash
args: 
  - "-c"
  - "python3 examples/test.py '{\"school\":\"EFG\", \"standard\": \"2\", \"name\": \"abc\", \"city\": \"miami\"}'\"]"

or

command: ["/bin/bash"]
args: ["-c", "python3 examples/test.py", '{"school":"EFG", "standard": "2", "name": "abc", "city": "miami"}']
command: 
  - /bin/bash
  - "-c"
args: 
  - "python3 examples/test.py"
  - "{\"school\":\"EFG\", \"standard\": \"2\", \"name\": \"abc\", \"city\": \"miami\"}"

or

command: ["/bin/bash", "-c"]
args: ["python3 examples/test.py", '{"school":"EFG", "standard": "2", "name": "abc", "city": "miami"}']
此外,关于在
spec
中运行多个kubernetes命令,还有一个问题。你可以找到它


让我知道这是否对你有用。

@Howard_Roark这样做吗?不,我不这么认为。目标是不要逃避任何引用。使用将json分离为单独参数的示例似乎会导致python程序在没有任何参数的情况下运行。ie-似乎
python3 examples/test.py
在没有json传递给它的情况下被自己调用了。根据上面的评论,我测试了这两个想法:
args:[“-c”,“python3 examples/test.py”,“school”:“EFG”,“standard”:“2”,“name”:“abc”,“city”:“miami”}]
args:[“python3 examples/test.py”,“py”{“school:“EFG”,“standard:“2”,“name:“abc”,“city:“miami”}']
可能是不同的方法,比如使用
ConfigMap
,在文本块标量中嵌入JSON?类似的内容已经在本文中提到过。