2012-07-27 67 views
2

我继承是用于设置使用厨师刀我们的应用环境有帮助的一些shell脚本。这很好。呼叫刀从Ruby脚本命令,而脱壳而出

但我真的很想做的是有一个Ruby脚本的强大功能和灵活性,以做同样的事情。

如果我掏出来knife我失去了指挥的实时输出。

好像我应该能够通过包括“厨师”的宝石,也许是“的CloudStack雾”插件我用它来调用所有的刀的功能,从内红宝石。

但我还没有发现任何实例或API文档。试图挖掘厨师宝石来源是一个挫折的锻炼。

我不应该能够从Ruby脚本做knife cloudstack server create -E ...等的相同呢?

回答

1

您可以通过使用Kernel模块的system方法来执行此操作,该方法将在子shell中执行您的命令并将其输出传送到当前shell。当我想能够看到以编程方式构建的参数的实时输出时,我在很多自定义的Knife插件中使用了这种刀片命令,如knife ssh

这里就是我建立和执行,这可能是一个非常复杂的命令的示例:

 
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

+0

D'哦!伟大的作品:) – Mojo 2012-08-18 00:00:30