2015-05-14 40 views
1

我有一个简单的任务,我坚持写盐状态。我需要使用curl和json body调用REST端点。这是SaltStack cmd.run与卷曲和json主体

curl localhost/endpoint -d '{"some" : "data"}'

我的想法是简单地拿这一点,并把它放入盐状态使用cmd.run。不起作用。到目前为止,我有这样的:

{%- set data = {'some': 'data'} %} 

Use echo instead of curl: 
    cmd.run: 
    - name: echo '{{ data|json }}' 

而这给了我

failed: Unknown yaml render error; line 5 

Use echo instead of curl: 
    cmd.run: 
    - name: echo '{"some": "data"}' <====================== 

我有盐版2014年7月1日

回答

4

对我来说,问题是“:”这是解释为YAML的curl命令中(参见:How to escape indicator characters (i.e. : or -) in YAML

我最终使用multi-line approach。这允许我写入命令时不会转义,而变量(例如柱状数据)仍然可以正确解释。

E.g.

Salt state description: 
    cmd.run: 
    - name: >- 
     curl -X GET "https://api.example.com/client/{{ pillar['client_id'] }}" -H "X-Auth-Email: [email protected]" -H "X-Auth-Key: {{ pillar['api_key'] }}" -H "Content-Type: application/json" --data '{"some_json":true}' 
+0

你已经节省了很多我的时间 –

+0

同样在这里,大thx! –

0

当使用JSON工作,有时更容易完全避免的神社渲染器。以下示例使用pybojects渲染器(这也适用于其他许多原因)。

echo.sls:

#!pyobjects 
import json 

data = {'some': 'data'} 

def dump(d): 
    return "'" + json.dumps(d).replace("'", "'\\''") + "'" 

Cmd.run("echo {}".format(dump(data))) 

注意,自定义dump功能定义和使用被添加的完整性的缘故。