2015-05-14 63 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功能定義和使用被添加的完整性的緣故。