我在 windows 中的托管主厨环境中工作。我们有一个用户界面,我们运行Chef Scripts。当没有参数要传递时,我们只需选择要执行的脚本并在后台运行带有刀命令的批处理文件执行脚本。 现在我需要动态地将参数传递给recipes.I尝试在属性文件中添加属性。它工作正常。但每次,我需要下载并更改属性并将配方上传到chef服务器并使用批处理运行它文件非常繁琐且耗时。 有没有其他方法可以满足这一要求?
感谢您的帮助。
答案 0 :(得分:0)
您可以直接向chef-client调用添加属性。这会杀死“当没有要传递的参数时”,但它确实允许您在运行时获取属性。有两种方法可以做到这一点。您可以使用-j
选项传入一个文件(可能与您的GUI很好地协作),或者您可以破解它。这个hack适用于linux,不知道你是如何用windows做的,但我确信有类似的选择。
echo '{ "myjson": "here" }' | chef-client -j /dev/stdin
或者如果您使用winrm
来运行chef-client
这样的内容:
knife winrm -m ipaddress 'echo "{ \"param\":\"test\"}" | chef-client -c c:/ chef/client.rb -j /dev/sdin' -m -x Administrator -P '@@@@@@'
假设你的另一端有一台linux机器。否则,我不知道如何读取stdin就好像它是一个文件一样。 -j /dev/stdin
可能不适用于Windows客户端。
答案 1 :(得分:0)
您可以在食谱代码中使用环境变量,但这通常非常脆弱。您还可以通过上面提到的-j
选项读取本地文件,或者只需在配方代码中打开并读取文件即可。没有直接的方法将参数传递给食谱,它通常表明你正在做一些非收敛的事情。