通过命令行将属性传递给厨师

Passing attributes to chef via command line

这让我抓狂,非常感谢任何帮助。

目前正在使用 运行 ssh 命令的配方,该命令接收 args 然后使用它。

字符串引号的转义简直让我发疯;请帮助我,你是我唯一的帮助。 :D

这是我的 ssh 所需的文字字符串:

ssh -i /home/ec2-user/.ssh/Test-Key.pem -o StrictHostKeyChecking=no  ec2-user@ipAddress echo '{\"attr\":\"value\"}' | sudo chef-client -o solr-restart -j /dev/stdin

它包含在食谱中的命令中,如下所示:

command "ssh -i /home/ec2-user/.ssh/Test-Key.pem -o StrictHostKeyChecking=no  ec2-user@ipAddress echo '{\"attr\":\"value\"}' | sudo chef-client -o solr-restart -j /dev/stdin"

无论我如何尝试和操作字符串,我都无法使输出正确,它要么删除 json 中的转义字符,要么添加其他字符。

我试过了echo '#{madness}'

疯狂 = madness = '{\"portAttribute\":\"'+"#{portNumber}"+'\"}'

但还是不行,感谢您的帮助。

这个有效 {\\"attr\\":\\"value\\"}'

你真的很可能并不意味着要使用 -j,它会完全覆盖节点上已经存在的任何数据,并且仅用于初始引导。之后你就不用在命令行传入数据了,它来自Chef Server。

恕我直言,您的字符串插值看起来不错,但是您想要 运行 在远程计算机上执行以下命令:

echo '{\"portAttribute\":\"#{portNumber}\"}' | sudo chef-client -o solr-restart -j /dev/stdin

命令应该稍微调整一下并在配方中传递为:

command "ssh -i /home/ec2-user/.ssh/Test-Key.pem -o StrictHostKeyChecking=no  ec2-user@ipAddress 'echo \'{\\"portAttribute\\":\\"#{portNumber}\\"}\' | sudo chef-client -o solr-restart -j /dev/stdin' "