从Ruby脚本中调用knife命令,而不需要执行任何操作



我继承了一些shell脚本,这些脚本有助于使用Chef和knife设置我们的应用程序环境。太好了。

但我真正想做的是拥有Ruby脚本的强大功能和灵活性来做同样的事情。

如果我退出到knife,我将丢失命令的实时输出。

我似乎应该能够从Ruby中调用knife的所有功能,包括"chef"gem,也许还有我使用的"cloudstack fog"插件。

但我还没有找到任何例子或API文档。试图挖掘厨师宝石的来源是一种挫败感。

难道我不应该从Ruby脚本中执行相当于knife cloudstack server create -E ...等的操作吗?

您可以使用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}"}系统(命令)

[1]http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-system

相关内容

最新更新