我继承了一些有助于使用Chef和knife设置应用程序环境的shell脚本。那太好了。
但我真正想做的是拥有Ruby脚本的强大功能和灵活性来做同样的事情。
如果我向knife
炮轰,我将失去该命令的实时输出。
似乎我应该能够通过包含'chef'宝石以及我使用的'cloudstack-fog'插件来调用Ruby中的所有刀具功能。
但我没有找到任何示例或API文档。试图挖掘厨师的宝石来源是一种令人沮丧的运动。
我不应该从Ruby脚本中执行等效的knife cloudstack server create -E ...
等等吗?
答案 0 :(得分:1)
您可以使用Kernel
模块的system
方法[1]执行此操作,该方法将在子shell中执行命令并将其输出传递给当前shell。当我希望能够看到编程建立的参数Knife命令(如knife ssh
)的实时输出时,我在许多自定义Knife插件中使用它。
这是我构建和执行可能是一个非常复杂的命令的示例:
query = "chef_environment:#{environment.name}" options = [ "-x #{::Chef::Config[:node_name]}" ].join(' ') command = %Q{knife ssh "#{query}" #{options} "#{chef_command}"} system(command)
[1] http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-system