2012-07-27 35 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