通过命令行将属性传递给chef

时间:2017-05-03 12:06:42

标签: string ssh chef chef-recipe string-interpolation

这让我感到疯狂,任何帮助都会受到大力赞赏。

目前使用配方运行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}"+'\"}'

但仍然没有运气,谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

恕我直言你的字符串插值看起来很好但是你想在远程机器上运行以下命令:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

你可能并不意味着使用-j,这完全覆盖了节点上已有的任何数据,并且仅用于初始引导。之后,您无法在命令行上传递数据,它来自Chef Server。