2017-05-03 56 views
0

这使我疯狂,任何帮助都被大量赞赏。通过命令行将属性传递给厨师

当前使用一个配方来运行一个ssh命令,从而该命令接受参数,然后使用它。

转义字符串引号的转义完全是疯了;请帮助我,所以你是我唯一的帮助。 :d

这是字面上的,我需要为我的SSH:

ssh -i /home/ec2-user/.ssh/Test-Key.pem -o StrictHostKeyChecking=no [email protected] 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 [email protected] echo '{\"attr\":\"value\"}' | sudo chef-client -o solr-restart -j /dev/stdin" 

不管我如何努力和操纵字符串我不能得到输出是正确的,它要么删除json中的转义字符,要么增加额外的字符。

我试图echo '#{madness}'

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

但仍没有运气,感谢您的帮助。

回答

1

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

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 [email protected] 'echo \'{\\\"portAttribute\\\":\\\"#{portNumber}\\\"}\' | sudo chef-client -o solr-restart -j /dev/stdin' " 
1

这工作 {\\\"attr\\\":\\\"value\\\"}'

1

你reeeeeeally可能不意味着要使用-j,那完全覆盖任何数据的节点上已经和仅用于inital引导。之后,您不会在命令行传递数据,它来自Chef Server。

+0

ISN 't -j通过sdin从儿子读入?为了更好地解释,我传递的价值来自一个集合,集合是从厨师服务器获取的过滤数据子集,我不相信我可以用其他方式来做这件事,至少我没有遇到。 我有很多节点,我需要过滤集合,然后遍历该集合依次连接到每个IP地址,但踢球者是每个IP都在特定端口上有服务,这也是我传递的。 我正在使用一个配方来运行另一个配方,但这本身导致调用另一个作为锁文件的问题...... – null

+0

否-j选项将文件路径作为路径。这通常只在使用旧式自注册引导程序时(第一次运行时才使用)(通常只有在处理自动缩放系统时才需要)。 – coderanger

+0

哦,我明白了。可能你有我想要实现的另一种解决方案? ONe更优雅,破坏性更小? – null

相关问题