3

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

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

如果我全力以赴,knife我会丢失命令的实时输出。

似乎我应该能够通过包含“厨师”gem 以及我使用的“cloudstack-fog”插件来从 Ruby 中调用刀的所有功能。

但我还没有找到任何示例或 API 文档。试图挖掘 Chef gem 的来源是一种挫败感。

我不应该能够knife cloudstack server create -E ...从 Ruby 脚本中执行等价的操作吗?

4

1 回答 1

1

您可以使用Kernel模块的system方法 [1] 来执行此操作,该方法将在子 shell 中执行您的命令并将其输出通过管道传输到您当前的 shell。当我希望能够看到以编程方式构建的参数 Knife 命令(如knife ssh.

这是一个示例,我在其中构造和执行可能是非常复杂的命令:

查询=“厨师环境:#{环境名称}”
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

于 2012-08-16T17:57:37.997 回答