具有curl和json body

时间:2015-05-14 09:29:42

标签: jinja2 salt-stack

我有一个简单的任务,我坚持写盐状态。我需要使用curl和json body调用REST端点。这是

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"}'    <======================

我有Salt版本2014.7.1

2 个答案:

答案 0 :(得分:7)

对我来说,问题是<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" indent="yes"/> <xsl:template match="/SiebelMessage/ListOfGroupPolicies"> <xsl:text>&#09;&#09;</xsl:text> <xsl:text>Client Sum Insured Report</xsl:text> <xsl:text>&#10;</xsl:text> <xsl:apply-templates select="GroupPolicies[not(preceding-sibling::GroupPolicies/Organization = Organization)]/Organization" /> </xsl:template> <xsl:template match="GroupPolicies" > <xsl:variable name="count" select="position()"/> <xsl:value-of select="$count"/> <xsl:text>&#09;</xsl:text> <xsl:value-of select="Policy"/> <xsl:text>&#09;</xsl:text> <xsl:value-of select="Customer"/> <xsl:text>&#09;</xsl:text> <xsl:value-of select="Cover"/> <xsl:text>&#09;</xsl:text> <xsl:value-of select="InsuredAccount"/> <!-- Comma Separated List of Insured Accounts per Cover--> <xsl:text>&#09;</xsl:text> <xsl:value-of select="count(../GroupPolicies[Organization=current()/Organization and Cover=current()/Cover]/Addenda[string-length()>0])"/> <xsl:text>&#09;</xsl:text> <xsl:value-of select="sum(../GroupPolicies[Organization=current()/Organization and Cover=current()/Cover]/SumInsured)"/> <xsl:text>&#09;</xsl:text> <xsl:value-of select="sum(../GroupPolicies[Organization=current()/Organization and Cover=current()/Cover]/CommAmt)"/> <xsl:text>&#10;</xsl:text> </xsl:template> <xsl:template match="Organization"> <xsl:text>&#10;</xsl:text> <xsl:text>SNo.</xsl:text> <xsl:text>&#09;</xsl:text> <xsl:text>Policy Number</xsl:text> <xsl:text>&#09;</xsl:text> <xsl:text>Customer Name</xsl:text> <xsl:text>&#09;</xsl:text> <xsl:text>Cover Note #</xsl:text> <xsl:text>&#09;</xsl:text> <xsl:text>Insured</xsl:text> <xsl:text>&#09;</xsl:text> <xsl:text>No. of Addendas</xsl:text> <xsl:text>&#09;</xsl:text> <xsl:text>Sum Insured</xsl:text> <xsl:text>&#09;</xsl:text> <xsl:text>Total Commission</xsl:text> <xsl:text>&#10;</xsl:text> <xsl:variable name="temp" select="." /> <xsl:apply-templates select="//GroupPolicies[Organization = current() and not(preceding-sibling::GroupPolicies/Cover=Cover)]"/> <xsl:text>Totals:</xsl:text> <xsl:text>&#09;&#09;&#09;&#09;&#09;&#09;&#09;&#09;&#09;&#09;&#09;&#09;&#09;</xsl:text><xsl:value-of select="sum(../../GroupPolicies[Organization=current()]/SumInsured)"/> <xsl:text>&#09;</xsl:text> <xsl:value-of select="sum(../../GroupPolicies[Organization=current()]/CommAmt)"/> </xsl:template> </xsl:stylesheet> 命令中的“:”被解释为YAML(参见:How to escape indicator characters (i.e. : or - ) in YAML

我最终使用了multi-line approach。这使得我可以在没有转义的情况下编写命令,同时仍然可以正确解释变量(例如支柱数据)。

E.g。

curl

答案 1 :(得分:0)

使用json时,有时更容易避免使用jinja渲染器。以下示例使用pybojects渲染器(由于许多其他原因这也很好)。

echo.sls:

#!pyobjects
import json

data = {'some': 'data'}

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

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

请注意,为了完整起见,添加了自定义dump函数定义和用法。